﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright company="HillHouse" file="MilAppendix.cs">
//   Copyright © 2009-2011 HillHouse
// </copyright>
// <summary>
//   Provides user friendly descriptions of symbol codes as well as a tree hierarchy for those codes.
// </summary>
// <license>
//   Licensed under the Ms-PL license.
// </license>
// <homepage>
//   http://milsym.codeplex.com
// </homepage>
// --------------------------------------------------------------------------------------------------------------------

namespace MilSym.MilSymbol
{
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;

    using MilSym.LoadResources;
    using MilSym.MilSymbol.Schemas;

    /// <summary>
    /// Maps the template for a symbol to a friendly name for that symbol as well as a parent template.
    /// Thus the entire symbol tree can be reproduced from this class.
    /// </summary>
    public class MilAppendix
    {
        /// <summary>
        /// The message logger
        /// </summary>
        private static readonly ILogger Log = LoggerFactory<MilAppendix>.GetLogger();

        /// <summary>
        /// A dictionary of all the templates in Appendix A.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryA = new Dictionary<string, DescData> 
        {
            { "S---------*****", new DescData("Warfighting Symbols", null) },
            { "S*P*------*****", new DescData("Space Track", "S---------*****") },
            { "S*P*S-----*****", new DescData("Satellite", "S*P*------*****") },
            { "S*P*V-----*****", new DescData("Crewed Space Vehicle", "S*P*------*****") },
            { "S*P*T-----*****", new DescData("Space Station", "S*P*------*****") },
            { "S*P*L-----*****", new DescData("Space Launch Vehicle", "S*P*------*****") },
            { "S*A*------*****", new DescData("Air Track", "S---------*****") },
            { "S*A*M-----*****", new DescData("Military", "S*A*------*****") },
            { "S*A*MF----*****", new DescData("Fixed Wing", "S*A*M-----*****") },
            { "S*A*MFB---*****", new DescData("Bomber", "S*A*MF----*****") },
            { "S*A*MFF---*****", new DescData("Fighter", "S*A*MF----*****") },
            { "S*A*MFFI--*****", new DescData("Interceptor", "S*A*MFF---*****") },
            { "S*A*MFT---*****", new DescData("Trainer", "S*A*MF----*****") },
            { "S*A*MFA---*****", new DescData("Attack/strike", "S*A*MF----*****") },
            { "S*A*MFL---*****", new DescData("V/stol", "S*A*MF----*****") },
            { "S*A*MFK---*****", new DescData("Tanker", "S*A*MF----*****") },
            { "S*A*MFKB--*****", new DescData("Tanker Boom-only", "S*A*MFK---*****") },
            { "S*A*MFKD--*****", new DescData("Tanker Drogue-only", "S*A*MFK---*****") },
            { "S*A*MFC---*****", new DescData("Cargo Airlift (transport)", "S*A*MF----*****") },
            { "S*A*MFCL--*****", new DescData("Cargo Airlift (light)", "S*A*MFC---*****") },
            { "S*A*MFCM--*****", new DescData("Cargo Airlift (medium)", "S*A*MFC---*****") },
            { "S*A*MFCH--*****", new DescData("Cargo Airlift (heavy)", "S*A*MFC---*****") },
            { "S*A*MFJ---*****", new DescData("Electronic Countermeasures (ECM/jammer)", "S*A*MF----*****") },
            { "S*A*MFO---*****", new DescData("Medical Evacuation (MedEvac)", "S*A*MF----*****") },
            { "S*A*MFR---*****", new DescData("Reconnaissance", "S*A*MF----*****") },
            { "S*A*MFRW--*****", new DescData("Airborne Early Warning (AEW)", "S*A*MFR---*****") },
            { "S*A*MFRZ--*****", new DescData("Electronic Surveillance Measures", "S*A*MFR---*****") },
            { "S*A*MFRX--*****", new DescData("Photographic", "S*A*MFR---*****") },
            { "S*A*MFP---*****", new DescData("Patrol", "S*A*MF----*****") },
            { "S*A*MFPN--*****", new DescData("Antisurface Warfare (ASUW)", "S*A*MFP---*****") },
            { "S*A*MFPM--*****", new DescData("Mine Countermeasures", "S*A*MFP---*****") },
            { "S*A*MFU---*****", new DescData("Utility", "S*A*MF----*****") },
            { "S*A*MFUL--*****", new DescData("Utility (light)", "S*A*MFU---*****") },
            { "S*A*MFUM--*****", new DescData("Utility (medium)", "S*A*MFU---*****") },
            { "S*A*MFUH--*****", new DescData("Utility (heavy)", "S*A*MFU---*****") },
            { "S*A*MFY---*****", new DescData("Communications", "S*A*MF----*****") },
            { "S*A*MFH---*****", new DescData("Combat Search And Rescue (csar)", "S*A*MF----*****") },
            { "S*A*MFD---*****", new DescData("Airborne Command Post (C2)", "S*A*MF----*****") },
            { "S*A*MFQ---*****", new DescData("Drone (RPV/UA)", "S*A*MF----*****") },
            { "S*A*MFQA--*****", new DescData("Attack", "S*A*MFQ---*****") },
            { "S*A*MFQB--*****", new DescData("Bomber", "S*A*MFQ---*****") },
            { "S*A*MFQC--*****", new DescData("Cargo", "S*A*MFQ---*****") },
            { "S*A*MFQD--*****", new DescData("Airborne Command Post", "S*A*MFQ---*****") },
            { "S*A*MFQF--*****", new DescData("Fighter", "S*A*MFQ---*****") },
            { "S*A*MFQH--*****", new DescData("Search & Rescue (CSAR)", "S*A*MFQ---*****") },
            { "S*A*MFQJ--*****", new DescData("Electronic Countermeasures (jammer)", "S*A*MFQ---*****") },
            { "S*A*MFQK--*****", new DescData("Tanker", "S*A*MFQ---*****") },
            { "S*A*MFQL--*****", new DescData("V/stol", "S*A*MFQ---*****") },
            { "S*A*MFQM--*****", new DescData("Special Operations Forces (SOF)", "S*A*MFQ---*****") },
            { "S*A*MFQI--*****", new DescData("Mine Countermeasures", "S*A*MFQ---*****") },
            { "S*A*MFQN--*****", new DescData("Antisurface Warfare (ASUW)", "S*A*MFQ---*****") },
            { "S*A*MFQP--*****", new DescData("Patrol", "S*A*MFQ---*****") },
            { "S*A*MFQR--*****", new DescData("Reconnaissance", "S*A*MFQ---*****") },
            { "S*A*MFQRW-*****", new DescData("Airborne Early Warning (AEW)", "S*A*MFQR--*****") },
            { "S*A*MFQRZ-*****", new DescData("Electronic Surveillance Measures", "S*A*MFQR--*****") },
            { "S*A*MFQRX-*****", new DescData("Photographic", "S*A*MFQR--*****") },
            { "S*A*MFQS--*****", new DescData("Antisubmarine Warfare (ASW)", "S*A*MFQ---*****") },
            { "S*A*MFQT--*****", new DescData("Trainer", "S*A*MFQ---*****") },
            { "S*A*MFQU--*****", new DescData("Utility", "S*A*MFQ---*****") },
            { "S*A*MFQY--*****", new DescData("Communications", "S*A*MFQ---*****") },
            { "S*A*MFQO--*****", new DescData("Medevac", "S*A*MFQ---*****") },
            { "S*A*MFS---*****", new DescData("Antisubmarine Warfare (ASW) Carrier Based", "S*A*MF----*****") },
            { "S*A*MFM---*****", new DescData("Special Operations Forces (SOF)", "S*A*MF----*****") },
            { "S*A*MH----*****", new DescData("Rotary Wing", "S*A*M-----*****") },
            { "S*A*MHA---*****", new DescData("Attack", "S*A*MH----*****") },
            { "S*A*MHS---*****", new DescData("Antisubmarine Warfare/MPA", "S*A*MH----*****") },
            { "S*A*MHU---*****", new DescData("Utility", "S*A*MH----*****") },
            { "S*A*MHUL--*****", new DescData("Utility (light)", "S*A*MHU---*****") },
            { "S*A*MHUM--*****", new DescData("Utility (medium)", "S*A*MHU---*****") },
            { "S*A*MHUH--*****", new DescData("Utility (heavy)", "S*A*MHU---*****") },
            { "S*A*MHI---*****", new DescData("Mine Countermeasures", "S*A*MH----*****") },
            { "S*A*MHH---*****", new DescData("Combat Search And Rescue (CSAR)", "S*A*MH----*****") },
            { "S*A*MHR---*****", new DescData("Reconnaissance", "S*A*MH----*****") },
            { "S*A*MHQ---*****", new DescData("Drone (RPV/UA)", "S*A*MH----*****") },
            { "S*A*MHC---*****", new DescData("Cargo Airlift (transport)", "S*A*MH----*****") },
            { "S*A*MHCL--*****", new DescData("Cargo Airlift (light)", "S*A*MHC---*****") },
            { "S*A*MHCM--*****", new DescData("Cargo Airlift (medium)", "S*A*MHC---*****") },
            { "S*A*MHCH--*****", new DescData("Cargo Airlift (heavy)", "S*A*MHC---*****") },
            { "S*A*MHT---*****", new DescData("Trainer", "S*A*MH----*****") },
            { "S*A*MHO---*****", new DescData("MedEvac", "S*A*MH----*****") },
            { "S*A*MHM---*****", new DescData("Special Operations Forces (SOF)", "S*A*MH----*****") },
            { "S*A*MHD---*****", new DescData("Airborne Command Post (C2)", "S*A*MH----*****") },
            { "S*A*MHK---*****", new DescData("Tanker", "S*A*MH----*****") },
            { "S*A*MHJ---*****", new DescData("Electronic Countermeasures (ECM/jammer)", "S*A*MH----*****") },
            { "S*A*ML----*****", new DescData("Lighter Than Air", "S*A*M-----*****") },
            { "S*A*MV----*****", new DescData("Very Important Person (VIP)", "S*A*M-----*****") },
            { "S*A*ME----*****", new DescData("Escort", "S*A*M-----*****") },
            { "S*A*W-----*****", new DescData("Weapon", "S*A*------*****") },
            { "S*A*WM----*****", new DescData("Missile In Flight", "S*A*W-----*****") },
            { "S*A*WMS---*****", new DescData("Surface Launched Missile", "S*A*WM----*****") },
            { "S*A*WMSS--*****", new DescData("Surface-to-surface Missile (SSM)", "S*A*WMS---*****") },
            { "S*A*WMSA--*****", new DescData("Surface-to-air Missile (SAM)", "S*A*WMS---*****") },
            { "S*A*WMSU--*****", new DescData("Surface-to-subsurface Missile", "S*A*WMS---*****") },
            { "S*A*WMSB--*****", new DescData("Antiballistic Missile (ABM)", "S*A*WMS---*****") },
            { "S*A*WMA---*****", new DescData("Air Launched Missile", "S*A*WM----*****") },
            { "S*A*WMAS--*****", new DescData("Air-to-surface Missile (ASM)", "S*A*WMA---*****") },
            { "S*A*WMAA--*****", new DescData("Air-to-air Missile (AAM)", "S*A*WMA---*****") },
            { "S*A*WMAP--*****", new DescData("Air-to-space Missile", "S*A*WMA---*****") },
            { "S*A*WMU---*****", new DescData("Subsurface-to-surface Missile (S/SSM)", "S*A*WM----*****") },
            { "S*A*WMCM--*****", new DescData("Cruise Missile", "S*A*WM----*****") },
            { "S*A*WMB---*****", new DescData("Ballistic Missile", "S*A*WM----*****") },
            { "S*A*WB----*****", new DescData("Bomb", "S*A*W-----*****") },
            { "S*A*WD----*****", new DescData("Decoy", "S*A*W-----*****") },
            { "S*A*C-----*****", new DescData("Civil Aircraft", "S*A*------*****") },
            { "S*A*CF----*****", new DescData("Fixed Wing", "S*A*C-----*****") },
            { "S*A*CH----*****", new DescData("Rotary Wing", "S*A*C-----*****") },
            { "S*A*CL----*****", new DescData("Lighter Than Air", "S*A*C-----*****") },
            { "S*G*------*****", new DescData("Ground Track", "S---------*****") },
            { "S*G*U-----*****", new DescData("Unit", "S*G*------*****") },
            { "S*G*UC----*****", new DescData("Combat", "S*G*U-----*****") },
            { "S*G*UCD---*****", new DescData("Air Defense", "S*G*UC----*****") },
            { "S*G*UCDS--*****", new DescData("Short Range", "S*G*UCD---*****") },
            { "S*G*UCDSC-*****", new DescData("Chaparral", "S*G*UCDS--*****") },
            { "S*G*UCDSS-*****", new DescData("Stinger", "S*G*UCDS--*****") },
            { "S*G*UCDSV-*****", new DescData("Vulcan", "S*G*UCDS--*****") },
            { "S*G*UCDM--*****", new DescData("Air Defense Missile", "S*G*UCD---*****") },
            { "S*G*UCDML-*****", new DescData("Air Defense Missile Light", "S*G*UCDM--*****") },
            { "S*G*UCDMLA*****", new DescData("Air Defense Missile Motorized (avenger)", "S*G*UCDML-*****") },
            { "S*G*UCDMM-*****", new DescData("Air Defense Missile Medium", "S*G*UCDM--*****") },
            { "S*G*UCDMH-*****", new DescData("Air Defense Missile Heavy", "S*G*UCDM--*****") },
            { "S*G*UCDH--*****", new DescData("H/mad", "S*G*UCDM--*****") },
            { "S*G*UCDHH-*****", new DescData("Hawk", "S*G*UCDH--*****") },
            { "S*G*UCDHP-*****", new DescData("Patriot", "S*G*UCDH--*****") },
            { "S*G*UCDG--*****", new DescData("Gun Unit", "S*G*UCD---*****") },
            { "S*G*UCDC--*****", new DescData("Composite", "S*G*UCD---*****") },
            { "S*G*UCDT--*****", new DescData("Targeting Unit", "S*G*UCD---*****") },
            { "S*G*UCDO--*****", new DescData("Theater Missile Defense Unit", "S*G*UCD---*****") },
            { "S*G*UCA---*****", new DescData("Armor", "S*G*UC----*****") },
            { "S*G*UCAT--*****", new DescData("Armor Track", "S*G*UCA---*****") },
            { "S*G*UCATA-*****", new DescData("Armor Track Airborne", "S*G*UCAT--*****") },
            { "S*G*UCATW-*****", new DescData("Armor Track Amphibious", "S*G*UCAT--*****") },
            { "S*G*UCATWR*****", new DescData("Armor Track Amphibious Recovery", "S*G*UCATW-*****") },
            { "S*G*UCATL-*****", new DescData("Armor Track, Light", "S*G*UCAT--*****") },
            { "S*G*UCATM-*****", new DescData("Armor Track, Medium", "S*G*UCAT--*****") },
            { "S*G*UCATH-*****", new DescData("Armor Track, Heavy", "S*G*UCAT--*****") },
            { "S*G*UCATR-*****", new DescData("Armor Track, Recovery", "S*G*UCAT--*****") },
            { "S*G*UCAW--*****", new DescData("Armor, Wheeled", "S*G*UCA---*****") },
            { "S*G*UCAWS-*****", new DescData("Armor, Wheeled Air Assault", "S*G*UCAW--*****") },
            { "S*G*UCAWA-*****", new DescData("Armor, Wheeled Airborne", "S*G*UCAW--*****") },
            { "S*G*UCAWW-*****", new DescData("Armor, Wheeled Amphibious", "S*G*UCAW--*****") },
            { "S*G*UCAWWR*****", new DescData("Armor, Wheeled Amphibious Recovery", "S*G*UCAWW-*****") },
            { "S*G*UCAWL-*****", new DescData("Armor, Wheeled Light", "S*G*UCAW--*****") },
            { "S*G*UCAWM-*****", new DescData("Armor, Wheeled Medium", "S*G*UCAW--*****") },
            { "S*G*UCAWH-*****", new DescData("Armor, Wheeled Heavy", "S*G*UCAW--*****") },
            { "S*G*UCAWR-*****", new DescData("Armor, Wheeled Recovery", "S*G*UCAW--*****") },
            { "S*G*UCAA--*****", new DescData("Antiarmor", "S*G*UC----*****") },
            { "S*G*UCAAD-*****", new DescData("Antiarmor Dismounted", "S*G*UCAA--*****") },
            { "S*G*UCAAL-*****", new DescData("Antiarmor Light", "S*G*UCAA--*****") },
            { "S*G*UCAAM-*****", new DescData("Antiarmor Airborne", "S*G*UCAA--*****") },
            { "S*G*UCAAS-*****", new DescData("Antiarmor Air Assault", "S*G*UCAA--*****") },
            { "S*G*UCAAU-*****", new DescData("Antiarmor Mountain", "S*G*UCAA--*****") },
            { "S*G*UCAAC-*****", new DescData("Antiarmor Arctic", "S*G*UCAA--*****") },
            { "S*G*UCAAA-*****", new DescData("Antiarmor Armored", "S*G*UCAA--*****") },
            { "S*G*UCAAAT*****", new DescData("Antiarmor Armored Tracked", "S*G*UCAAA-*****") },
            { "S*G*UCAAAW*****", new DescData("Antiarmor Armored Wheeled", "S*G*UCAAA-*****") },
            { "S*G*UCAAAS*****", new DescData("Antiarmor Armored Air Assault", "S*G*UCAAA-*****") },
            { "S*G*UCAAO-*****", new DescData("Antiarmor Motorized", "S*G*UCAA--*****") },
            { "S*G*UCAAOS*****", new DescData("Antiarmor Motorized Air Assault", "S*G*UCAAO-*****") },
            { "S*G*UCV---*****", new DescData("Aviation", "S*G*UC----*****") },
            { "S*G*UCVF--*****", new DescData("Fixed Wing", "S*G*UCV---*****") },
            { "S*G*UCVFU-*****", new DescData("Utility Fixed Wing", "S*G*UCVF--*****") },
            { "S*G*UCVFA-*****", new DescData("Attack Fixed Wing", "S*G*UCVF--*****") },
            { "S*G*UCVFR-*****", new DescData("Recon Fixed Wing", "S*G*UCVF--*****") },
            { "S*G*UCVR--*****", new DescData("Rotary Wing", "S*G*UCV---*****") },
            { "S*G*UCVRA-*****", new DescData("Attack Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRS-*****", new DescData("Scout Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRW-*****", new DescData("Antisubmarine Warfare Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRU-*****", new DescData("Utility Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRUL*****", new DescData("Light Utility Rotary Wing", "S*G*UCVRU-*****") },
            { "S*G*UCVRUM*****", new DescData("Medium Utility Rotary Wing", "S*G*UCVRU-*****") },
            { "S*G*UCVRUH*****", new DescData("Heavy Utility Rotary Wing", "S*G*UCVRU-*****") },
            { "S*G*UCVRUC*****", new DescData("C2 Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRUE*****", new DescData("Medevac Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVRM-*****", new DescData("Mine Countermeasure Rotary Wing", "S*G*UCVR--*****") },
            { "S*G*UCVS--*****", new DescData("Search And Rescue", "S*G*UCV---*****") },
            { "S*G*UCVC--*****", new DescData("Composite", "S*G*UCV---*****") },
            { "S*G*UCVV--*****", new DescData("Vertical And/or Short Takeoff And Landing Aircraft (v/stol)", "S*G*UCV---*****") },
            { "S*G*UCVU--*****", new DescData("Unmanned Aircraft", "S*G*UCV---*****") },
            { "S*G*UCVUF-*****", new DescData("Unmanned Aircraft Fixed Wing", "S*G*UCVU--*****") },
            { "S*G*UCVUR-*****", new DescData("Unmanned Aircraft Rotary Wing", "S*G*UCVU--*****") },
            { "S*G*UCI---*****", new DescData("Infantry", "S*G*UC----*****") },
            { "S*G*UCIL--*****", new DescData("Infantry Light", "S*G*UCI---*****") },
            { "S*G*UCIM--*****", new DescData("Infantry Motorized", "S*G*UCI---*****") },
            { "S*G*UCIO--*****", new DescData("Infantry Mountain", "S*G*UCI---*****") },
            { "S*G*UCIA--*****", new DescData("Infantry Airborne", "S*G*UCI---*****") },
            { "S*G*UCIS--*****", new DescData("Infantry Air Assault", "S*G*UCI---*****") },
            { "S*G*UCIZ--*****", new DescData("Infantry Mechanized", "S*G*UCI---*****") },
            { "S*G*UCIN--*****", new DescData("Infantry Naval", "S*G*UCI---*****") },
            { "S*G*UCII--*****", new DescData("Infantry Fighting Vehicle", "S*G*UCI---*****") },
            { "S*G*UCIC--*****", new DescData("Infantry Arctic", "S*G*UCI---*****") },
            { "S*G*UCE---*****", new DescData("Engineer", "S*G*UC----*****") },
            { "S*G*UCEC--*****", new DescData("Engineer Combat", "S*G*UCE---*****") },
            { "S*G*UCECS-*****", new DescData("Engineer Combat Air Assault", "S*G*UCEC--*****") },
            { "S*G*UCECA-*****", new DescData("Engineer Combat Airborne", "S*G*UCEC--*****") },
            { "S*G*UCECC-*****", new DescData("Engineer Combat Arctic", "S*G*UCEC--*****") },
            { "S*G*UCECL-*****", new DescData("Engineer Combat Light (sapper)", "S*G*UCEC--*****") },
            { "S*G*UCECM-*****", new DescData("Engineer Combat Medium", "S*G*UCEC--*****") },
            { "S*G*UCECH-*****", new DescData("Engineer Combat Heavy", "S*G*UCEC--*****") },
            { "S*G*UCECT-*****", new DescData("Engineer Combat Mechanized (track)", "S*G*UCEC--*****") },
            { "S*G*UCECW-*****", new DescData("Engineer Combat Motorized", "S*G*UCEC--*****") },
            { "S*G*UCECO-*****", new DescData("Engineer Combat Mountain", "S*G*UCEC--*****") },
            { "S*G*UCECR-*****", new DescData("Engineer Combat Recon", "S*G*UCEC--*****") },
            { "S*G*UCEN--*****", new DescData("Engineer Construction", "S*G*UCE---*****") },
            { "S*G*UCENN-*****", new DescData("Engineer Naval Construction", "S*G*UCEN--*****") },
            { "S*G*UCF---*****", new DescData("Field Artillery", "S*G*UC----*****") },
            { "S*G*UCFH--*****", new DescData("Howitzer/gun", "S*G*UCF---*****") },
            { "S*G*UCFHE-*****", new DescData("Self-propelled", "S*G*UCFH--*****") },
            { "S*G*UCFHS-*****", new DescData("Air Assault", "S*G*UCFH--*****") },
            { "S*G*UCFHA-*****", new DescData("Airborne", "S*G*UCFH--*****") },
            { "S*G*UCFHC-*****", new DescData("Arctic", "S*G*UCFH--*****") },
            { "S*G*UCFHO-*****", new DescData("Mountain", "S*G*UCFH--*****") },
            { "S*G*UCFHL-*****", new DescData("Light", "S*G*UCFH--*****") },
            { "S*G*UCFHM-*****", new DescData("Medium", "S*G*UCFH--*****") },
            { "S*G*UCFHH-*****", new DescData("Heavy", "S*G*UCFH--*****") },
            { "S*G*UCFHX-*****", new DescData("Amphibious", "S*G*UCFH--*****") },
            { "S*G*UCFR--*****", new DescData("Rocket", "S*G*UCF---*****") },
            { "S*G*UCFRS-*****", new DescData("Single Rocket Launcher", "S*G*UCFR--*****") },
            { "S*G*UCFRSS*****", new DescData("Single Rocket Self-propelled", "S*G*UCFRS-*****") },
            { "S*G*UCFRSR*****", new DescData("Single Rocket Truck", "S*G*UCFRS-*****") },
            { "S*G*UCFRST*****", new DescData("Single Rocket Towed", "S*G*UCFRS-*****") },
            { "S*G*UCFRM-*****", new DescData("Multiple Rocket Launcher", "S*G*UCFR--*****") },
            { "S*G*UCFRMS*****", new DescData("Multiple Rocket Self-propelled", "S*G*UCFRM-*****") },
            { "S*G*UCFRMR*****", new DescData("Multiple Rocket Truck", "S*G*UCFRM-*****") },
            { "S*G*UCFRMT*****", new DescData("Multiple Rocket Towed", "S*G*UCFRM-*****") },
            { "S*G*UCFT--*****", new DescData("Target Acquisition", "S*G*UCF---*****") },
            { "S*G*UCFTR-*****", new DescData("Radar", "S*G*UCFT--*****") },
            { "S*G*UCFTS-*****", new DescData("Sound", "S*G*UCFT--*****") },
            { "S*G*UCFTF-*****", new DescData("Flash (optical)", "S*G*UCFT--*****") },
            { "S*G*UCFTC-*****", new DescData("Colt/fist", "S*G*UCFT--*****") },
            { "S*G*UCFTCD*****", new DescData("Dismounted Colt/fist", "S*G*UCFTC-*****") },
            { "S*G*UCFTCM*****", new DescData("Tracked Colt/fist", "S*G*UCFTC-*****") },
            { "S*G*UCFTA-*****", new DescData("Anglico", "S*G*UCFT--*****") },
            { "S*G*UCFM--*****", new DescData("Mortar", "S*G*UCF---*****") },
            { "S*G*UCFMS-*****", new DescData("Self-propelled (sp) Tracked Mortar", "S*G*UCFM--*****") },
            { "S*G*UCFMW-*****", new DescData("Sp Wheeled Mortar", "S*G*UCFM--*****") },
            { "S*G*UCFMT-*****", new DescData("Towed Mortar", "S*G*UCFM--*****") },
            { "S*G*UCFMTA*****", new DescData("Towed Airborne Mortar", "S*G*UCFMT-*****") },
            { "S*G*UCFMTS*****", new DescData("Towed Air Assault Mortar", "S*G*UCFMT-*****") },
            { "S*G*UCFMTC*****", new DescData("Towed Arctic Mortar", "S*G*UCFMT-*****") },
            { "S*G*UCFMTO*****", new DescData("Towed Mountain Mortar", "S*G*UCFMT-*****") },
            { "S*G*UCFML-*****", new DescData("Amphibious Mortar", "S*G*UCFM--*****") },
            { "S*G*UCFS--*****", new DescData("Artillery Survey", "S*G*UCF---*****") },
            { "S*G*UCFSS-*****", new DescData("Air Assault", "S*G*UCFS--*****") },
            { "S*G*UCFSA-*****", new DescData("Airborne", "S*G*UCFS--*****") },
            { "S*G*UCFSL-*****", new DescData("Light", "S*G*UCFS--*****") },
            { "S*G*UCFSO-*****", new DescData("Mountain", "S*G*UCFS--*****") },
            { "S*G*UCFO--*****", new DescData("Meteorological", "S*G*UCF---*****") },
            { "S*G*UCFOS-*****", new DescData("Air Assault Meteorological", "S*G*UCFO--*****") },
            { "S*G*UCFOA-*****", new DescData("Airborne Meteorological", "S*G*UCFO--*****") },
            { "S*G*UCFOL-*****", new DescData("Light Meteorological", "S*G*UCFO--*****") },
            { "S*G*UCFOO-*****", new DescData("Mountain Meteorological", "S*G*UCFO--*****") },
            { "S*G*UCR---*****", new DescData("Reconnaissance", "S*G*UC----*****") },
            { "S*G*UCRH--*****", new DescData("Reconnaissance Horse", "S*G*UCR---*****") },
            { "S*G*UCRV--*****", new DescData("Reconnaissance Cavalry", "S*G*UCR---*****") },
            { "S*G*UCRVA-*****", new DescData("Reconnaissance Cavalry Armored", "S*G*UCRV--*****") },
            { "S*G*UCRVM-*****", new DescData("Reconnaissance Cavalry Motorized", "S*G*UCRV--*****") },
            { "S*G*UCRVG-*****", new DescData("Reconnaissance Cavalry Ground", "S*G*UCRV--*****") },
            { "S*G*UCRVO-*****", new DescData("Reconnaissance Cavalry Air", "S*G*UCRV--*****") },
            { "S*G*UCRC--*****", new DescData("Reconnaissance Arctic", "S*G*UCR---*****") },
            { "S*G*UCRS--*****", new DescData("Reconnaissance Air Assault", "S*G*UCR---*****") },
            { "S*G*UCRA--*****", new DescData("Reconnaissance Airborne", "S*G*UCR---*****") },
            { "S*G*UCRO--*****", new DescData("Reconnaissance Mountain", "S*G*UCR---*****") },
            { "S*G*UCRL--*****", new DescData("Reconnaissance Light", "S*G*UCR---*****") },
            { "S*G*UCRR--*****", new DescData("Reconnaissance Marine", "S*G*UCR---*****") },
            { "S*G*UCRRD-*****", new DescData("Reconnaissance Marine Division", "S*G*UCRR--*****") },
            { "S*G*UCRRF-*****", new DescData("Reconnaissance Marine Force", "S*G*UCRR--*****") },
            { "S*G*UCRRL-*****", new DescData("Reconnaissance Marine Light Armored Reconnaissnace (lar)", "S*G*UCRR--*****") },
            { "S*G*UCRX--*****", new DescData("Reconnaissance Long Range Surveillance (lrs)", "S*G*UCR---*****") },
            { "S*G*UCM---*****", new DescData("Missile (surf-surf)", "S*G*UC----*****") },
            { "S*G*UCMT--*****", new DescData("Missile (surf-surf) Tactical", "S*G*UCM---*****") },
            { "S*G*UCMS--*****", new DescData("Missile (surf-surf) Strategic", "S*G*UCM---*****") },
            { "S*G*UCS---*****", new DescData("Internal Security Forces", "S*G*UC----*****") },
            { "S*G*UCSW--*****", new DescData("Riverine", "S*G*UCS---*****") },
            { "S*G*UCSG--*****", new DescData("Ground", "S*G*UCS---*****") },
            { "S*G*UCSGD-*****", new DescData("Dismounted Ground", "S*G*UCSG--*****") },
            { "S*G*UCSGM-*****", new DescData("Motorized Ground", "S*G*UCSG--*****") },
            { "S*G*UCSGA-*****", new DescData("Mechanized Ground", "S*G*UCSG--*****") },
            { "S*G*UCSM--*****", new DescData("Wheeled Mechanized", "S*G*UCS---*****") },
            { "S*G*UCSR--*****", new DescData("Railroad", "S*G*UCS---*****") },
            { "S*G*UCSA--*****", new DescData("Aviation", "S*G*UCS---*****") },
            { "S*G*UU----*****", new DescData("Combat Support", "S*G*U-----*****") },
            { "S*G*UUA---*****", new DescData("Combat Support Cbrn", "S*G*UU----*****") },
            { "S*G*UUAC--*****", new DescData("Chemical", "S*G*UUA---*****") },
            { "S*G*UUACC-*****", new DescData("Smoke/decon", "S*G*UUAC--*****") },
            { "S*G*UUACCK*****", new DescData("Mechanized Smoke/decon", "S*G*UUACC-*****") },
            { "S*G*UUACCM*****", new DescData("Motorized Smoke/decon", "S*G*UUACC-*****") },
            { "S*G*UUACS-*****", new DescData("Smoke", "S*G*UUAC--*****") },
            { "S*G*UUACSM*****", new DescData("Motorized Smoke", "S*G*UUACS-*****") },
            { "S*G*UUACSA*****", new DescData("Armor Smoke", "S*G*UUACS-*****") },
            { "S*G*UUACR-*****", new DescData("Chemical Recon", "S*G*UUAC--*****") },
            { "S*G*UUACRW*****", new DescData("Chemical Wheeled Armored Vehicle", "S*G*UUACR-*****") },
            { "S*G*UUACRS*****", new DescData("Chemical Wheeled Armored Vehicle Reconnaissance Surveillance", "S*G*UUACR-*****") },
            { "S*G*UUAN--*****", new DescData("Nuclear", "S*G*UUA---*****") },
            { "S*G*UUAB--*****", new DescData("Biological", "S*G*UUA---*****") },
            { "S*G*UUABR-*****", new DescData("Recon Equipped", "S*G*UUAB--*****") },
            { "S*G*UUAD--*****", new DescData("Decontamination", "S*G*UUA---*****") },
            { "S*G*UUM---*****", new DescData("Military Intelligence", "S*G*UU----*****") },
            { "S*G*UUMA--*****", new DescData("Aerial Exploitation", "S*G*UUM---*****") },
            { "S*G*UUMS--*****", new DescData("Signal Intelligence (sigint)", "S*G*UUM---*****") },
            { "S*G*UUMSE-*****", new DescData("Electronic Warfare", "S*G*UUMS--*****") },
            { "S*G*UUMSEA*****", new DescData("Armored Wheeled Vehicle", "S*G*UUMSE-*****") },
            { "S*G*UUMSED*****", new DescData("Direction Finding", "S*G*UUMSE-*****") },
            { "S*G*UUMSEI*****", new DescData("Intercept", "S*G*UUMSE-*****") },
            { "S*G*UUMSEJ*****", new DescData("Jamming", "S*G*UUMSE-*****") },
            { "S*G*UUMSET*****", new DescData("Theater", "S*G*UUMSE-*****") },
            { "S*G*UUMSEC*****", new DescData("Corps", "S*G*UUMSE-*****") },
            { "S*G*UUMC--*****", new DescData("Counterintelligence", "S*G*UUM---*****") },
            { "S*G*UUMR--*****", new DescData("Surveillance", "S*G*UUM---*****") },
            { "S*G*UUMRG-*****", new DescData("Ground Surveillance Radar", "S*G*UUMR--*****") },
            { "S*G*UUMRS-*****", new DescData("Sensor", "S*G*UUMR--*****") },
            { "S*G*UUMRSS*****", new DescData("Sensor Scm", "S*G*UUMRS-*****") },
            { "S*G*UUMRX-*****", new DescData("Ground Station Module", "S*G*UUMR--*****") },
            { "S*G*UUMMO-*****", new DescData("Meteorological", "S*G*UUMR--*****") },
            { "S*G*UUMO--*****", new DescData("Operations", "S*G*UUM---*****") },
            { "S*G*UUMT--*****", new DescData("Tactical Exploit", "S*G*UUM---*****") },
            { "S*G*UUMQ--*****", new DescData("Interrogation", "S*G*UUM---*****") },
            { "S*G*UUMJ--*****", new DescData("Joint Intelligence Center", "S*G*UUM---*****") },
            { "S*G*UUL---*****", new DescData("Law Enforcement Unit", "S*G*UU----*****") },
            { "S*G*UULS--*****", new DescData("Shore Patrol", "S*G*UUL---*****") },
            { "S*G*UULM--*****", new DescData("Military Police", "S*G*UUL---*****") },
            { "S*G*UULC--*****", new DescData("Civilian Law Enforcement", "S*G*UUL---*****") },
            { "S*G*UULF--*****", new DescData("Security Police (air)", "S*G*UUL---*****") },
            { "S*G*UULD--*****", new DescData("Central Intelligence Division (cid)", "S*G*UUL---*****") },
            { "S*G*UUS---*****", new DescData("Signal Unit", "S*G*UU----*****") },
            { "S*G*UUSA--*****", new DescData("Area", "S*G*UUS---*****") },
            { "S*G*UUSC--*****", new DescData("Communication Configured Package", "S*G*UUS---*****") },
            { "S*G*UUSCL-*****", new DescData("Large Communication Configured Package (lccp)", "S*G*UUSC--*****") },
            { "S*G*UUSO--*****", new DescData("Command Operations", "S*G*UUS---*****") },
            { "S*G*UUSF--*****", new DescData("Forward Communications", "S*G*UUS---*****") },
            { "S*G*UUSM--*****", new DescData("Multiple Subscriber Element", "S*G*UUS---*****") },
            { "S*G*UUSMS-*****", new DescData("Small Extension Node", "S*G*UUSM--*****") },
            { "S*G*UUSML-*****", new DescData("Large Extension Node", "S*G*UUSM--*****") },
            { "S*G*UUSMN-*****", new DescData("Node Center", "S*G*UUSM--*****") },
            { "S*G*UUSR--*****", new DescData("Radio Unit", "S*G*UUS---*****") },
            { "S*G*UUSRS-*****", new DescData("Tactical Satellite", "S*G*UUSR--*****") },
            { "S*G*UUSRT-*****", new DescData("Teletype Center", "S*G*UUSR--*****") },
            { "S*G*UUSRW-*****", new DescData("Relay", "S*G*UUSR--*****") },
            { "S*G*UUSS--*****", new DescData("Signal Support", "S*G*UUS---*****") },
            { "S*G*UUSW--*****", new DescData("Telephone Switch", "S*G*UUS---*****") },
            { "S*G*UUSX--*****", new DescData("Electronic Ranging", "S*G*UUS---*****") },
            { "S*G*UUI---*****", new DescData("Information Warfare Unit", "S*G*UU----*****") },
            { "S*G*UUP---*****", new DescData("Landing Support", "S*G*UU----*****") },
            { "S*G*UUE---*****", new DescData("Explosive Ordnance Disposal", "S*G*UU----*****") },
            { "S*G*US----*****", new DescData("Combat Service Support", "S*G*U-----*****") },
            { "S*G*USA---*****", new DescData("Administrative (admin)", "S*G*US----*****") },
            { "S*G*USAT--*****", new DescData("Admin Theater", "S*G*USA---*****") },
            { "S*G*USAC--*****", new DescData("Admin Corps", "S*G*USA---*****") },
            { "S*G*USAJ--*****", new DescData("Judge Advocate General (jag)", "S*G*USA---*****") },
            { "S*G*USAJT-*****", new DescData("Jag Theater", "S*G*USAJ--*****") },
            { "S*G*USAJC-*****", new DescData("Jag Corps", "S*G*USAJ--*****") },
            { "S*G*USAO--*****", new DescData("Postal", "S*G*USA---*****") },
            { "S*G*USAOT-*****", new DescData("Postal Theater", "S*G*USAO--*****") },
            { "S*G*USAOC-*****", new DescData("Postal Corps", "S*G*USAO--*****") },
            { "S*G*USAF--*****", new DescData("Finance", "S*G*USA---*****") },
            { "S*G*USAFT-*****", new DescData("Finance Theater", "S*G*USAF--*****") },
            { "S*G*USAFC-*****", new DescData("Finance Corps", "S*G*USAF--*****") },
            { "S*G*USAS--*****", new DescData("Personnel Services", "S*G*USA---*****") },
            { "S*G*USAST-*****", new DescData("Personnel Theater", "S*G*USAS--*****") },
            { "S*G*USASC-*****", new DescData("Personnel Corps", "S*G*USAS--*****") },
            { "S*G*USAM--*****", new DescData("Mortuary/graves Registry", "S*G*USA---*****") },
            { "S*G*USAMT-*****", new DescData("Mortuary/graves Registry Theater", "S*G*USAM--*****") },
            { "S*G*USAMC-*****", new DescData("Mortuary/graves Registry Corps", "S*G*USAM--*****") },
            { "S*G*USAR--*****", new DescData("Religious/chaplain", "S*G*USA---*****") },
            { "S*G*USART-*****", new DescData("Religious/chaplain Theater", "S*G*USAR--*****") },
            { "S*G*USARC-*****", new DescData("Religious/chaplain Corps", "S*G*USAR--*****") },
            { "S*G*USAP--*****", new DescData("Public Affairs", "S*G*USA---*****") },
            { "S*G*USAPT-*****", new DescData("Public Affairs Theater", "S*G*USAP--*****") },
            { "S*G*USAPC-*****", new DescData("Public Affairs Corps", "S*G*USAP--*****") },
            { "S*G*USAPB-*****", new DescData("Public Affairs Broadcast", "S*G*USAP--*****") },
            { "S*G*USAPBT*****", new DescData("Public Affairs Broadcast Theater", "S*G*USAPB-*****") },
            { "S*G*USAPBC*****", new DescData("Public Affairs Broadcast Corps", "S*G*USAPB-*****") },
            { "S*G*USAPM-*****", new DescData("Public Affairs Joint Information Bureau (jib)", "S*G*USAP--*****") },
            { "S*G*USAPMT*****", new DescData("Public Affairs Jib Theater", "S*G*USAPM-*****") },
            { "S*G*USAPMC*****", new DescData("Public Affairs Jib Corps", "S*G*USAPM-*****") },
            { "S*G*USAX--*****", new DescData("Replacement Holding Unit (rhu)", "S*G*USA---*****") },
            { "S*G*USAXT-*****", new DescData("Rhu Theater", "S*G*USAX--*****") },
            { "S*G*USAXC-*****", new DescData("Rhu Corps", "S*G*USAX--*****") },
            { "S*G*USAL--*****", new DescData("Labor", "S*G*USA---*****") },
            { "S*G*USALT-*****", new DescData("Labor Theater", "S*G*USAL--*****") },
            { "S*G*USALC-*****", new DescData("Labor Corps", "S*G*USAL--*****") },
            { "S*G*USAW--*****", new DescData("Morale, Welfare, Recreation (mwr)", "S*G*USA---*****") },
            { "S*G*USAWT-*****", new DescData("Mwr Theater", "S*G*USAW--*****") },
            { "S*G*USAWC-*****", new DescData("Mwr Corps", "S*G*USAW--*****") },
            { "S*G*USAQ--*****", new DescData("Quartermaster (supply)", "S*G*USA---*****") },
            { "S*G*USAQT-*****", new DescData("Quartermaster (supply) Theater", "S*G*USAQ--*****") },
            { "S*G*USAQC-*****", new DescData("Quartermaster (supply) Corps", "S*G*USAQ--*****") },
            { "S*G*USM---*****", new DescData("Medical", "S*G*US----*****") },
            { "S*G*USMT--*****", new DescData("Medical Theater", "S*G*USM---*****") },
            { "S*G*USMC--*****", new DescData("Medical Corps", "S*G*USM---*****") },
            { "S*G*USMM--*****", new DescData("Medical Treatment Facility", "S*G*USM---*****") },
            { "S*G*USMMT-*****", new DescData("Medical Treatment Facility Theater", "S*G*USMM--*****") },
            { "S*G*USMMC-*****", new DescData("Medical Treatment Facility Corps", "S*G*USMM--*****") },
            { "S*G*USMV--*****", new DescData("Medical Veterinary", "S*G*USM---*****") },
            { "S*G*USMVT-*****", new DescData("Medical Veterinary Theater", "S*G*USMV--*****") },
            { "S*G*USMVC-*****", new DescData("Medical Veterinary Corps", "S*G*USMV--*****") },
            { "S*G*USMD--*****", new DescData("Medical Dental", "S*G*USM---*****") },
            { "S*G*USMDT-*****", new DescData("Medical Dental Theater", "S*G*USMD--*****") },
            { "S*G*USMDC-*****", new DescData("Medical Dental Corps", "S*G*USMD--*****") },
            { "S*G*USMP--*****", new DescData("Medical Psychological", "S*G*USM---*****") },
            { "S*G*USMPT-*****", new DescData("Medical Psychological Theater", "S*G*USMP--*****") },
            { "S*G*USMPC-*****", new DescData("Medical Psychological Corps", "S*G*USMP--*****") },
            { "S*G*USS---*****", new DescData("Supply", "S*G*US----*****") },
            { "S*G*USST--*****", new DescData("Supply Theater", "S*G*USS---*****") },
            { "S*G*USSC--*****", new DescData("Supply Corps", "S*G*USS---*****") },
            { "S*G*USS1--*****", new DescData("Supply Class I", "S*G*USS---*****") },
            { "S*G*USS1T-*****", new DescData("Supply Class I Theater", "S*G*USS1--*****") },
            { "S*G*USS1C-*****", new DescData("Supply Class I Corps", "S*G*USS1--*****") },
            { "S*G*USS2--*****", new DescData("Supply Class Ii", "S*G*USS---*****") },
            { "S*G*USS2T-*****", new DescData("Supply Class Ii Theater", "S*G*USS2--*****") },
            { "S*G*USS2C-*****", new DescData("Supply Class Ii Corps", "S*G*USS2--*****") },
            { "S*G*USS3--*****", new DescData("Supply Class Iii", "S*G*USS---*****") },
            { "S*G*USS3T-*****", new DescData("Supply Class Iii Theater", "S*G*USS3--*****") },
            { "S*G*USS3C-*****", new DescData("Supply Class Iii Corps", "S*G*USS3--*****") },
            { "S*G*USS3A-*****", new DescData("Supply Class Iii Aviation", "S*G*USS3--*****") },
            { "S*G*USS3AT*****", new DescData("Supply Class Iii Aviation Theater", "S*G*USS3A-*****") },
            { "S*G*USS3AC*****", new DescData("Supply Class Iii Aviation Corps", "S*G*USS3A-*****") },
            { "S*G*USS4--*****", new DescData("Supply Class Iv", "S*G*USS---*****") },
            { "S*G*USS4T-*****", new DescData("Supply Class Iv Theater", "S*G*USS4--*****") },
            { "S*G*USS4C-*****", new DescData("Supply Class Iv Corps", "S*G*USS4--*****") },
            { "S*G*USS5--*****", new DescData("Supply Class V", "S*G*USS---*****") },
            { "S*G*USS5T-*****", new DescData("Supply Class V Theater", "S*G*USS5--*****") },
            { "S*G*USS5C-*****", new DescData("Supply Class V Corps", "S*G*USS5--*****") },
            { "S*G*USS6--*****", new DescData("Supply Class Vi", "S*G*USS---*****") },
            { "S*G*USS6T-*****", new DescData("Supply Class Vi Theater", "S*G*USS6--*****") },
            { "S*G*USS6C-*****", new DescData("Supply Class Vi Corps", "S*G*USS6--*****") },
            { "S*G*USS7--*****", new DescData("Supply Class Vii", "S*G*USS---*****") },
            { "S*G*USS7T-*****", new DescData("Supply Class Vii Theater", "S*G*USS7--*****") },
            { "S*G*USS7C-*****", new DescData("Supply Class Vii Corps", "S*G*USS7--*****") },
            { "S*G*USS8--*****", new DescData("Supply Class Viii", "S*G*USS---*****") },
            { "S*G*USS8T-*****", new DescData("Supply Class Viii Theater", "S*G*USS8--*****") },
            { "S*G*USS8C-*****", new DescData("Supply Class Viii Corps", "S*G*USS8--*****") },
            { "S*G*USS9--*****", new DescData("Supply Class Ix", "S*G*USS---*****") },
            { "S*G*USS9T-*****", new DescData("Supply Class Ix Theater", "S*G*USS9--*****") },
            { "S*G*USS9C-*****", new DescData("Supply Class Ix Corps", "S*G*USS9--*****") },
            { "S*G*USSX--*****", new DescData("Supply Class X", "S*G*USS---*****") },
            { "S*G*USSXT-*****", new DescData("Supply Class X Theater", "S*G*USSX--*****") },
            { "S*G*USSXC-*****", new DescData("Supply Class X Corps", "S*G*USSX--*****") },
            { "S*G*USSL--*****", new DescData("Supply Laundry/bath", "S*G*USS---*****") },
            { "S*G*USSLT-*****", new DescData("Supply Laundry/bath Theater", "S*G*USSL--*****") },
            { "S*G*USSLC-*****", new DescData("Supply Laundry/bath Corps", "S*G*USSL--*****") },
            { "S*G*USSW--*****", new DescData("Supply Water", "S*G*USS---*****") },
            { "S*G*USSWT-*****", new DescData("Supply Water Theater", "S*G*USSW--*****") },
            { "S*G*USSWC-*****", new DescData("Supply Water Corps", "S*G*USSW--*****") },
            { "S*G*USSWP-*****", new DescData("Supply Water Purification", "S*G*USSW--*****") },
            { "S*G*USSWPT*****", new DescData("Supply Water Purification Theater", "S*G*USSWP-*****") },
            { "S*G*USSWPC*****", new DescData("Supply Water Purification Corps", "S*G*USSWP-*****") },
            { "S*G*UST---*****", new DescData("Transportation", "S*G*US----*****") },
            { "S*G*USTT--*****", new DescData("Transportation Theater", "S*G*UST---*****") },
            { "S*G*USTC--*****", new DescData("Transportation Corps", "S*G*UST---*****") },
            { "S*G*USTM--*****", new DescData("Movement Control Center (mcc)", "S*G*UST---*****") },
            { "S*G*USTMT-*****", new DescData("Mcc Theater", "S*G*USTM--*****") },
            { "S*G*USTMC-*****", new DescData("Mcc Corps", "S*G*USTM--*****") },
            { "S*G*USTR--*****", new DescData("Railhead", "S*G*UST---*****") },
            { "S*G*USTRT-*****", new DescData("Railhead Theater", "S*G*USTR--*****") },
            { "S*G*USTRC-*****", new DescData("Railhead Corps", "S*G*USTR--*****") },
            { "S*G*USTS--*****", new DescData("Spod/spoe", "S*G*UST---*****") },
            { "S*G*USTST-*****", new DescData("Spod/spoe Theater", "S*G*USTS--*****") },
            { "S*G*USTSC-*****", new DescData("Spod/spoe Corps", "S*G*USTS--*****") },
            { "S*G*USTA--*****", new DescData("Apod/apoe", "S*G*UST---*****") },
            { "S*G*USTAT-*****", new DescData("Apod/apoe Theater", "S*G*USTA--*****") },
            { "S*G*USTAC-*****", new DescData("Apod/apoe Corps", "S*G*USTA--*****") },
            { "S*G*USTI--*****", new DescData("Missile", "S*G*UST---*****") },
            { "S*G*USTIT-*****", new DescData("Missile Theater", "S*G*USTI--*****") },
            { "S*G*USTIC-*****", new DescData("Missile Corps", "S*G*USTI--*****") },
            { "S*G*USX---*****", new DescData("Maintenance", "S*G*US----*****") },
            { "S*G*USXT--*****", new DescData("Maintenance Theater", "S*G*USX---*****") },
            { "S*G*USXC--*****", new DescData("Maintenance Corps", "S*G*USX---*****") },
            { "S*G*USXH--*****", new DescData("Maintenance Heavy", "S*G*USX---*****") },
            { "S*G*USXHT-*****", new DescData("Maintenance Heavy Theater", "S*G*USXH--*****") },
            { "S*G*USXHC-*****", new DescData("Maintenance Heavy Corps", "S*G*USXH--*****") },
            { "S*G*USXR--*****", new DescData("Maintenance Recovery", "S*G*USX---*****") },
            { "S*G*USXRT-*****", new DescData("Maintenance Recovery Theater", "S*G*USXR--*****") },
            { "S*G*USXRC-*****", new DescData("Maintenance Recovery Corps", "S*G*USXR--*****") },
            { "S*G*USXO--*****", new DescData("Ordnance", "S*G*USX---*****") },
            { "S*G*USXOT-*****", new DescData("Ordnance Theater", "S*G*USXO--*****") },
            { "S*G*USXOC-*****", new DescData("Ordnance Corps", "S*G*USXO--*****") },
            { "S*G*USXOM-*****", new DescData("Ordnance Missile", "S*G*USXO--*****") },
            { "S*G*USXOMT*****", new DescData("Ordnance Missile Theater", "S*G*USXOM-*****") },
            { "S*G*USXOMC*****", new DescData("Ordnance Missile Corps", "S*G*USXOM-*****") },
            { "S*G*USXE--*****", new DescData("Electro-optical", "S*G*USX---*****") },
            { "S*G*USXET-*****", new DescData("Electro-optical Theater", "S*G*USXE--*****") },
            { "S*G*USXEC-*****", new DescData("Electro-optical Corps", "S*G*USXE--*****") },
            { "S*G*UH----*****", new DescData("Special C2 Headquarters Component", "S*G*U-----*****") },
            { "S*G*E-----*****", new DescData("Ground Track Equipment", "S*G*------*****") },
            { "S*G*EW----*****", new DescData("Weapon", "S*G*E-----*****") },
            { "S*G*EWM---*****", new DescData("Missile Launcher", "S*G*EW----*****") },
            { "S*G*EWMA--*****", new DescData("Air Defense (ad) Missile Launcher", "S*G*EWM---*****") },
            { "S*G*EWMAS-*****", new DescData("Short Range Ad Missile Launcher", "S*G*EWMA--*****") },
            { "S*G*EWMASR*****", new DescData("Transporter Launcher And Radar (tlar)", "S*G*EWMAS-*****") },
            { "S*G*EWMASE*****", new DescData("Transporter Erector Launcher And Radar (telar)", "S*G*EWMAS-*****") },
            { "S*G*EWMAI-*****", new DescData("Intermediate Range Ad Missile Launcher", "S*G*EWMA--*****") },
            { "S*G*EWMAIR*****", new DescData("Transporter Launcher And Radar (tlar)", "S*G*EWMAI-*****") },
            { "S*G*EWMAIE*****", new DescData("Transporter Erector Launcher And Radar (telar)", "S*G*EWMAI-*****") },
            { "S*G*EWMAL-*****", new DescData("Long Range Ad Missile Launcher", "S*G*EWMA--*****") },
            { "S*G*EWMALR*****", new DescData("Transporter Launcher And Radar (tlar)", "S*G*EWMAL-*****") },
            { "S*G*EWMALE*****", new DescData("Transporter Erector Launcher And Radar (telar)", "S*G*EWMAL-*****") },
            { "S*G*EWMAT-*****", new DescData("Ad Missile Launcher Theater", "S*G*EWMA--*****") },
            { "S*G*EWMATR*****", new DescData("Transporter Launcher And Radar (tlar)", "S*G*EWMAT-*****") },
            { "S*G*EWMATE*****", new DescData("Transporter Erector Launcher And Radar (telar)", "S*G*EWMAT-*****") },
            { "S*G*EWMS--*****", new DescData("Surf-surf (ss) Missile Launcher", "S*G*EWM---*****") },
            { "S*G*EWMSS-*****", new DescData("Short Range Ss Missile Launcher", "S*G*EWMS--*****") },
            { "S*G*EWMSI-*****", new DescData("Intermediate Range Ss Missile Launcher", "S*G*EWMS--*****") },
            { "S*G*EWMSL-*****", new DescData("Long Range Ss Missile Launcher", "S*G*EWMS--*****") },
            { "S*G*EWMT--*****", new DescData("Missile Launcher Antitank (at)", "S*G*EWM---*****") },
            { "S*G*EWMTL-*****", new DescData("Missile Launcher At Light", "S*G*EWMT--*****") },
            { "S*G*EWMTM-*****", new DescData("Missile Launcher At Medium", "S*G*EWMT--*****") },
            { "S*G*EWMTH-*****", new DescData("Missile Launcher At Heavy", "S*G*EWMT--*****") },
            { "S*G*EWS---*****", new DescData("Single Rocket Launcher", "S*G*EW----*****") },
            { "S*G*EWSL--*****", new DescData("Single Rocket Launcher Light", "S*G*EWS---*****") },
            { "S*G*EWSM--*****", new DescData("Single Rocket Launcher Medium", "S*G*EWS---*****") },
            { "S*G*EWSH--*****", new DescData("Single Rocket Launcher Heavy", "S*G*EWS---*****") },
            { "S*G*EWX---*****", new DescData("Multiple Rocket Launcher", "S*G*EW----*****") },
            { "S*G*EWXL--*****", new DescData("Multiple Rocket Launcher Light", "S*G*EWX---*****") },
            { "S*G*EWXM--*****", new DescData("Multiple Rocket Launcher Medium", "S*G*EWX---*****") },
            { "S*G*EWXH--*****", new DescData("Multiple Rocket Launcher Heavy", "S*G*EWX---*****") },
            { "S*G*EWT---*****", new DescData("Antitank Rocket Launcher", "S*G*EW----*****") },
            { "S*G*EWTL--*****", new DescData("Antitank Rocket Launcher Light", "S*G*EWT---*****") },
            { "S*G*EWTM--*****", new DescData("Antitank Rocket Launcher Medium", "S*G*EWT---*****") },
            { "S*G*EWTH--*****", new DescData("Antitank Rocket Launcher Heavy", "S*G*EWT---*****") },
            { "S*G*EWR---*****", new DescData("Rifle/automatic Weapon", "S*G*EW----*****") },
            { "S*G*EWRR--*****", new DescData("Rifle", "S*G*EWR---*****") },
            { "S*G*EWRL--*****", new DescData("Light Machine Gun", "S*G*EWR---*****") },
            { "S*G*EWRH--*****", new DescData("Heavy Machine Gun", "S*G*EWR---*****") },
            { "S*G*EWZ---*****", new DescData("Grenade Launcher", "S*G*EW----*****") },
            { "S*G*EWZL--*****", new DescData("Grenade Launcher Light", "S*G*EWZ---*****") },
            { "S*G*EWZM--*****", new DescData("Grenade Launcher Medium", "S*G*EWZ---*****") },
            { "S*G*EWZH--*****", new DescData("Grenade Launcher Heavy", "S*G*EWZ---*****") },
            { "S*G*EWO---*****", new DescData("Mortar", "S*G*EW----*****") },
            { "S*G*EWOL--*****", new DescData("Mortar Light", "S*G*EWO---*****") },
            { "S*G*EWOM--*****", new DescData("Mortar Medium", "S*G*EWO---*****") },
            { "S*G*EWOH--*****", new DescData("Mortar Heavy", "S*G*EWO---*****") },
            { "S*G*EWH---*****", new DescData("Howitzer", "S*G*EW----*****") },
            { "S*G*EWHL--*****", new DescData("Howitzer Light", "S*G*EWH---*****") },
            { "S*G*EWHLS-*****", new DescData("Howitzer Light Self-propelled", "S*G*EWHL--*****") },
            { "S*G*EWHM--*****", new DescData("Howitzer Medium", "S*G*EWH---*****") },
            { "S*G*EWHMS-*****", new DescData("Howitzer Medium Self-propelled", "S*G*EWHM--*****") },
            { "S*G*EWHH--*****", new DescData("Howitzer Heavy", "S*G*EWH---*****") },
            { "S*G*EWHHS-*****", new DescData("Howitzer Heavy Self-propelled", "S*G*EWHH--*****") },
            { "S*G*EWG---*****", new DescData("Antitank Gun", "S*G*EW----*****") },
            { "S*G*EWGL--*****", new DescData("Antitank Gun Light", "S*G*EWG---*****") },
            { "S*G*EWGM--*****", new DescData("Antitank Gun Medium", "S*G*EWG---*****") },
            { "S*G*EWGH--*****", new DescData("Antitank Gun Heavy", "S*G*EWG---*****") },
            { "S*G*EWGR--*****", new DescData("Antitank Gun Recoilless", "S*G*EWG---*****") },
            { "S*G*EWD---*****", new DescData("Direct Fire Gun", "S*G*EW----*****") },
            { "S*G*EWDL--*****", new DescData("Direct Fire Gun Light", "S*G*EWD---*****") },
            { "S*G*EWDLS-*****", new DescData("Direct Fire Gun Light Self-propelled", "S*G*EWDL--*****") },
            { "S*G*EWDM--*****", new DescData("Direct Fire Gun Medium", "S*G*EWD---*****") },
            { "S*G*EWDMS-*****", new DescData("Direct Fire Gun Medium Self-propelled", "S*G*EWDM--*****") },
            { "S*G*EWDH--*****", new DescData("Direct Fire Gun Heavy", "S*G*EWD---*****") },
            { "S*G*EWDHS-*****", new DescData("Direct Fire Gun Heavy Self-propelled", "S*G*EWDH--*****") },
            { "S*G*EWA---*****", new DescData("Air Defense Gun", "S*G*EW----*****") },
            { "S*G*EWAL--*****", new DescData("Air Defense Gun Light", "S*G*EWA---*****") },
            { "S*G*EWAM--*****", new DescData("Air Defense Gun Medium", "S*G*EWA---*****") },
            { "S*G*EWAH--*****", new DescData("Air Defense Gun Heavy", "S*G*EWA---*****") },
            { "S*G*EV----*****", new DescData("Ground Vehicle", "S*G*E-----*****") },
            { "S*G*EVA---*****", new DescData("Armored Vehicle", "S*G*EV----*****") },
            { "S*G*EVAT--*****", new DescData("Tank", "S*G*EVA---*****") },
            { "S*G*EVATL-*****", new DescData("Tank Light", "S*G*EVAT--*****") },
            { "S*G*EVATLR*****", new DescData("Tank Light Recovery", "S*G*EVATL-*****") },
            { "S*G*EVATM-*****", new DescData("Tank Medium", "S*G*EVAT--*****") },
            { "S*G*EVATMR*****", new DescData("Tank Medium Recovery", "S*G*EVATM-*****") },
            { "S*G*EVATH-*****", new DescData("Tank Heavy", "S*G*EVAT--*****") },
            { "S*G*EVATHR*****", new DescData("Tank Heavy Recovery", "S*G*EVATH-*****") },
            { "S*G*EVAA--*****", new DescData("Armored Personnel Carrier", "S*G*EVA---*****") },
            { "S*G*EVAAR-*****", new DescData("Armored Personnel Carrier Recovery", "S*G*EVAA--*****") },
            { "S*G*EVAI--*****", new DescData("Armored Infantry", "S*G*EVA---*****") },
            { "S*G*EVAC--*****", new DescData("C2v/acv", "S*G*EVA---*****") },
            { "S*G*EVAS--*****", new DescData("Combat Service Support Vehicle", "S*G*EVA---*****") },
            { "S*G*EVAL--*****", new DescData("Light Armored Vehicle", "S*G*EVA---*****") },
            { "S*G*EVU---*****", new DescData("Utility Vehicle", "S*G*EV----*****") },
            { "S*G*EVUB--*****", new DescData("Bus", "S*G*EVU---*****") },
            { "S*G*EVUS--*****", new DescData("Semi", "S*G*EVU---*****") },
            { "S*G*EVUSL-*****", new DescData("Semi Light", "S*G*EVUS--*****") },
            { "S*G*EVUSM-*****", new DescData("Semi Medium", "S*G*EVUS--*****") },
            { "S*G*EVUSH-*****", new DescData("Semi Heavy", "S*G*EVUS--*****") },
            { "S*G*EVUL--*****", new DescData("Limited Cross-country Truck", "S*G*EVU---*****") },
            { "S*G*EVUX--*****", new DescData("Cross-country Truck", "S*G*EVU---*****") },
            { "S*G*EVUR--*****", new DescData("Water Craft", "S*G*EVU---*****") },
            { "S*G*EVUT--*****", new DescData("Tow Truck", "S*G*EVU---*****") },
            { "S*G*EVUTL-*****", new DescData("Tow Truck Light", "S*G*EVUT--*****") },
            { "S*G*EVUTH-*****", new DescData("Tow Truck Heavy", "S*G*EVUT--*****") },
            { "S*G*EVUA--*****", new DescData("Ambulance", "S*G*EVU---*****") },
            { "S*G*EVUAA-*****", new DescData("Armored Ambulance", "S*G*EVUA--*****") },
            { "S*G*EVE---*****", new DescData("Engineer Vehicle", "S*G*EV----*****") },
            { "S*G*EVEB--*****", new DescData("Bridge", "S*G*EVE---*****") },
            { "S*G*EVEE--*****", new DescData("Earthmover", "S*G*EVE---*****") },
            { "S*G*EVEC--*****", new DescData("Construction Vehicle", "S*G*EVE---*****") },
            { "S*G*EVEM--*****", new DescData("Mine Laying Vehicle", "S*G*EVE---*****") },
            { "S*G*EVEMV-*****", new DescData("Armored Carrier With Volcano", "S*G*EVEM--*****") },
            { "S*G*EVEML-*****", new DescData("Truck Mounted With Volcano", "S*G*EVEM--*****") },
            { "S*G*EVEA--*****", new DescData("Mine Clearing Vehicle", "S*G*EVE---*****") },
            { "S*G*EVEAA-*****", new DescData("Armored Mounted Mine Clearing Vehicle", "S*G*EVEA--*****") },
            { "S*G*EVEAT-*****", new DescData("Trailer Mounted Mine Clearing Vehicle", "S*G*EVEA--*****") },
            { "S*G*EVED--*****", new DescData("Dozer", "S*G*EVE---*****") },
            { "S*G*EVEDA-*****", new DescData("Armored Dozer", "S*G*EVED--*****") },
            { "S*G*EVES--*****", new DescData("Armored Assault", "S*G*EVE---*****") },
            { "S*G*EVER--*****", new DescData("Armored Engineer Recon Vehicle (aerv)", "S*G*EVE---*****") },
            { "S*G*EVEH--*****", new DescData("Backhoe", "S*G*EVE---*****") },
            { "S*G*EVEF--*****", new DescData("Ferry Transporter", "S*G*EVE---*****") },
            { "S*G*EVT---*****", new DescData("Train Locomotive", "S*G*EV----*****") },
            { "S*G*EVC---*****", new DescData("Civilian Vehicle", "S*G*EV----*****") },
            { "S*G*EVCA--*****", new DescData("Automobile", "S*G*EVC---*****") },
            { "S*G*EVCAL-*****", new DescData("Compact Automobile", "S*G*EVCA--*****") },
            { "S*G*EVCAM-*****", new DescData("Midsize Automobile", "S*G*EVCA--*****") },
            { "S*G*EVCAH-*****", new DescData("Sedan Automobile", "S*G*EVCA--*****") },
            { "S*G*EVCO--*****", new DescData("Open-bed Truck", "S*G*EVC---*****") },
            { "S*G*EVCOL-*****", new DescData("Pickup Open-bed Truck", "S*G*EVCO--*****") },
            { "S*G*EVCOM-*****", new DescData("Small Open-bed Truck", "S*G*EVCO--*****") },
            { "S*G*EVCOH-*****", new DescData("Large Open-bed Truck", "S*G*EVCO--*****") },
            { "S*G*EVCM--*****", new DescData("Multiple Passenger Vehicle", "S*G*EVC---*****") },
            { "S*G*EVCML-*****", new DescData("Van Multiple Passenger Vehicle", "S*G*EVCM--*****") },
            { "S*G*EVCMM-*****", new DescData("Small Bus Multiple Passenger Vehicle", "S*G*EVCM--*****") },
            { "S*G*EVCMH-*****", new DescData("Large Bus Multiple Passenger Vehicle", "S*G*EVCM--*****") },
            { "S*G*EVCU--*****", new DescData("Utility Vehicle", "S*G*EVC---*****") },
            { "S*G*EVCUL-*****", new DescData("Sport Utility Vehicle (suv), Utility Vehicle", "S*G*EVCU--*****") },
            { "S*G*EVCUM-*****", new DescData("Small Box Truck, Utility Vehicle", "S*G*EVCU--*****") },
            { "S*G*EVCUH-*****", new DescData("Large Box Truck, Utility Vehicle", "S*G*EVCU--*****") },
            { "S*G*EVCJ--*****", new DescData("Jeep Type Vehicle", "S*G*EVC---*****") },
            { "S*G*EVCJL-*****", new DescData("Small/light Jeep Type Vehicle", "S*G*EVCJ--*****") },
            { "S*G*EVCJM-*****", new DescData("Medium Jeep Type Vehicle", "S*G*EVCJ--*****") },
            { "S*G*EVCJH-*****", new DescData("Large/heavy Jeep Type Vehicle", "S*G*EVCJ--*****") },
            { "S*G*EVCT--*****", new DescData("Tractor Trailer Truck With Box Trailer", "S*G*EVC---*****") },
            { "S*G*EVCTL-*****", new DescData("Small/light Box Trailer, Tractor Trailer Truck", "S*G*EVCT--*****") },
            { "S*G*EVCTM-*****", new DescData("Medium Box Trailer, Tractor Trailer Truck", "S*G*EVCT--*****") },
            { "S*G*EVCTH-*****", new DescData("Large/heavy Box Trailer, Tractor Trailer Truck", "S*G*EVCT--*****") },
            { "S*G*EVCF--*****", new DescData("Tractor Trailer Truck With Flatbed Trailer", "S*G*EVC---*****") },
            { "S*G*EVCFL-*****", new DescData("Small/light Flatbed Trailer, Tractor Trailer Truck", "S*G*EVCF--*****") },
            { "S*G*EVCFM-*****", new DescData("Medium Flatbed Trailer, Tractor Trailer Truck", "S*G*EVCF--*****") },
            { "S*G*EVCFH-*****", new DescData("Large/heavy Flatbed Trailer, Tractor Trailer Truck", "S*G*EVCF--*****") },
            { "S*G*EVM---*****", new DescData("Pack Animal(s)", "S*G*EV----*****") },
            { "S*G*EVS---*****", new DescData("Missile Support Vehicle", "S*G*EV----*****") },
            { "S*G*EVST--*****", new DescData("Missile Support Vehicle Transloader", "S*G*EVS---*****") },
            { "S*G*EVSR--*****", new DescData("Missile Support Vehicle Transporter", "S*G*EVS---*****") },
            { "S*G*EVSC--*****", new DescData("Missile Support Vehicle Crane/loading Device", "S*G*EVS---*****") },
            { "S*G*EVSP--*****", new DescData("Missile Support Vehicle Propellant Transporter", "S*G*EVS---*****") },
            { "S*G*EVSW--*****", new DescData("Missile Support Vehicle Warhead Transporter", "S*G*EVS---*****") },
            { "S*G*ES----*****", new DescData("Sensor", "S*G*E-----*****") },
            { "S*G*ESR---*****", new DescData("Radar", "S*G*ES----*****") },
            { "S*G*ESE---*****", new DescData("Emplaced Sensor", "S*G*ES----*****") },
            { "S*G*EX----*****", new DescData("Special Equipment", "S*G*E-----*****") },
            { "S*G*EXI---*****", new DescData("Improvised Explosive Device", "S*G*EX----*****") },
            { "S*G*EXL---*****", new DescData("Laser", "S*G*EX----*****") },
            { "S*G*EXN---*****", new DescData("Cbrn Equipment", "S*G*EX----*****") },
            { "S*G*EXF---*****", new DescData("Flame Thrower", "S*G*EX----*****") },
            { "S*G*EXM---*****", new DescData("Land Mines", "S*G*EX----*****") },
            { "S*G*EXMC--*****", new DescData("Claymore", "S*G*EXM---*****") },
            { "S*G*EXML--*****", new DescData("Less Than Lethal", "S*G*EXM---*****") },
            { "S*G*I-----H****", new DescData("Installation", "S*G*------*****") },
            { "S*G*IR----H****", new DescData("Raw Material Production/storage", "S*G*I-----H****") },
            { "S*G*IRM---H****", new DescData("Mine", "S*G*IR----H****") },
            { "S*G*IRP---H****", new DescData("Petroleum/gas/oil", "S*G*IR----H****") },
            { "S*G*IRN---H****", new DescData("Cbrn", "S*G*IR----H****") },
            { "S*G*IRNB--H****", new DescData("Biological", "S*G*IRN---H****") },
            { "S*G*IRNC--H****", new DescData("Chemical", "S*G*IRN---H****") },
            { "S*G*IRNN--H****", new DescData("Nuclear", "S*G*IRN---H****") },
            { "S*G*IP----H****", new DescData("Processing Facility", "S*G*I-----H****") },
            { "S*G*IPD---H****", new DescData("Decontamination", "S*G*IP----H****") },
            { "S*G*IE----H****", new DescData("Equipment Manufacture", "S*G*I-----H****") },
            { "S*G*IU----H****", new DescData("Service, Research, Utility Facility", "S*G*I-----H****") },
            { "S*G*IUR---H****", new DescData("Technological Research Facility", "S*G*IU----H****") },
            { "S*G*IUT---H****", new DescData("Telecommunications Facility", "S*G*IU----H****") },
            { "S*G*IUE---H****", new DescData("Electric Power Facility", "S*G*IU----H****") },
            { "S*G*IUEN--H****", new DescData("Nuclear Plant", "S*G*IUE---H****") },
            { "S*G*IUED--H****", new DescData("Dam", "S*G*IUE---H****") },
            { "S*G*IUEF--H****", new DescData("Fossil Fuel", "S*G*IUE---H****") },
            { "S*G*IUP---H****", new DescData("Public Water Services", "S*G*IU----H****") },
            { "S*G*IM----H****", new DescData("Military Materiel Facility", "S*G*I-----H****") },
            { "S*G*IMF---H****", new DescData("Nuclear Energy", "S*G*IM----H****") },
            { "S*G*IMFA--H****", new DescData("Atomic Energy Reactor", "S*G*IMF---H****") },
            { "S*G*IMFP--H****", new DescData("Nuclear Material Production", "S*G*IMF---H****") },
            { "S*G*IMFPW-H****", new DescData("Weapons Grade", "S*G*IMFP--H****") },
            { "S*G*IMFS--H****", new DescData("Nuclear Material Storage", "S*G*IMF---H****") },
            { "S*G*IMA---H****", new DescData("Aircraft Production & Assembly", "S*G*IM----H****") },
            { "S*G*IME---H****", new DescData("Ammunition And Explosives Production", "S*G*IM----H****") },
            { "S*G*IMG---H****", new DescData("Armament Production", "S*G*IM----H****") },
            { "S*G*IMV---H****", new DescData("Military Vehicle Production", "S*G*IM----H****") },
            { "S*G*IMN---H****", new DescData("Engineering Equipment Production", "S*G*IM----H****") },
            { "S*G*IMNB--H****", new DescData("Bridge", "S*G*IMN---H****") },
            { "S*G*IMC---H****", new DescData("Chemical & Biological Warfare Production", "S*G*IM----H****") },
            { "S*G*IMS---H****", new DescData("Ship Construction", "S*G*IM----H****") },
            { "S*G*IMM---H****", new DescData("Missile & Space System Production", "S*G*IM----H****") },
            { "S*G*IG----H****", new DescData("Government Leadership", "S*G*I-----H****") },
            { "S*G*IB----H****", new DescData("Military Base/facility", "S*G*I-----H****") },
            { "S*G*IBA---H****", new DescData("Airport/airbase", "S*G*IB----H****") },
            { "S*G*IBN---H****", new DescData("Seaport/naval Base", "S*G*IB----H****") },
            { "S*G*IT----H****", new DescData("Transport Facility", "S*G*I-----H****") },
            { "S*G*IX----H****", new DescData("Medical Facility", "S*G*I-----H****") },
            { "S*G*IXH---H****", new DescData("Hospital", "S*G*IX----H****") },
            { "S*S*------*****", new DescData("Sea Surface Track", "S---------*****") },
            { "S*S*C-----*****", new DescData("Combatant", "S*S*------*****") },
            { "S*S*CL----*****", new DescData("Line", "S*S*C-----*****") },
            { "S*S*CLCV--*****", new DescData("Carrier", "S*S*CL----*****") },
            { "S*S*CLBB--*****", new DescData("Battleship", "S*S*CL----*****") },
            { "S*S*CLCC--*****", new DescData("Cruiser", "S*S*CL----*****") },
            { "S*S*CLDD--*****", new DescData("Destroyer", "S*S*CL----*****") },
            { "S*S*CLFF--*****", new DescData("Frigate/corvette", "S*S*CL----*****") },
            { "S*S*CLLL--*****", new DescData("Littoral Combatant", "S*S*CL----*****") },
            { "S*S*CLLLAS*****", new DescData("Antisubmarine Warfare Mission Package", "S*S*CLLL--*****") },
            { "S*S*CLLLMI*****", new DescData("Mine Warfare Mission Package", "S*S*CLLL--*****") },
            { "S*S*CLLLSU*****", new DescData("Surface Warfare (suw) Mission Package", "S*S*CLLL--*****") },
            { "S*S*CA----*****", new DescData("Amphibious Warfare Ship", "S*S*C-----*****") },
            { "S*S*CALA--*****", new DescData("Assault Vessel", "S*S*CA----*****") },
            { "S*S*CALS--*****", new DescData("Landing Ship", "S*S*CA----*****") },
            { "S*S*CALSM-*****", new DescData("Landing Ship Medium", "S*S*CALS--*****") },
            { "S*S*CALST-*****", new DescData("Landing Ship Tank", "S*S*CALS--*****") },
            { "S*S*CALC--*****", new DescData("Landing Craft", "S*S*CA----*****") },
            { "S*S*CM----*****", new DescData("Mine Warfare Vessel", "S*S*C-----*****") },
            { "S*S*CMML--*****", new DescData("Minelayer", "S*S*CM----*****") },
            { "S*S*CMMS--*****", new DescData("Minesweeper", "S*S*CM----*****") },
            { "S*S*CMMH--*****", new DescData("Minehunter", "S*S*CM----*****") },
            { "S*S*CMMA--*****", new DescData("Mcm Support", "S*S*CM----*****") },
            { "S*S*CP----*****", new DescData("Patrol", "S*S*C-----*****") },
            { "S*S*CPSB--*****", new DescData("Antisubmarine Warfare", "S*S*CP----*****") },
            { "S*S*CPSU--*****", new DescData("Antisurface Warfare", "S*S*CP----*****") },
            { "S*S*CPSUM-*****", new DescData("Antiship Missile Patrol Craft", "S*S*CPSU--*****") },
            { "S*S*CPSUT-*****", new DescData("Torpedo Patrol Craft", "S*S*CPSU--*****") },
            { "S*S*CPSUG-*****", new DescData("Gun Patrol Craft", "S*S*CPSU--*****") },
            { "S*S*CH----*****", new DescData("Hovercraft", "S*S*C-----*****") },
            { "S*S*G-----*****", new DescData("Navy Group", "S*S*C-----*****") },
            { "S*S*GT----*****", new DescData("Navy Task Force", "S*S*G-----*****") },
            { "S*S*GG----*****", new DescData("Navy Task Group", "S*S*G-----*****") },
            { "S*S*GU----*****", new DescData("Navy Task Unit", "S*S*G-----*****") },
            { "S*S*GC----*****", new DescData("Convoy", "S*S*G-----*****") },
            { "S*S*CD----*****", new DescData("Surface Decoy", "S*S*C-----*****") },
            { "S*S*CU----*****", new DescData("Unmanned Surface Vehicle", "S*S*C-----*****") },
            { "S*S*CUM---*****", new DescData("Mine Countermeasures Surface Drone", "S*S*CU----*****") },
            { "S*S*CUS---*****", new DescData("Antisubmarine Warfare Surface Drone", "S*S*CU----*****") },
            { "S*S*CUN---*****", new DescData("Antisurface Warfare Surface Drone", "S*S*CU----*****") },
            { "S*S*CUR---*****", new DescData("Remote Multimission Vehicle", "S*S*CU----*****") },
            { "S*S*N-----*****", new DescData("Noncombatant", "S*S*------*****") },
            { "S*S*NR----*****", new DescData("Underway Replenishment", "S*S*N-----*****") },
            { "S*S*NF----*****", new DescData("Fleet Support", "S*S*N-----*****") },
            { "S*S*NI----*****", new DescData("Intelligence", "S*S*N-----*****") },
            { "S*S*NS----*****", new DescData("Service & Support Harbor", "S*S*N-----*****") },
            { "S*S*NM----*****", new DescData("Hospital Ship", "S*S*N-----*****") },
            { "S*S*NH----*****", new DescData("Hovercraft", "S*S*N-----*****") },
            { "S*S*X-----*****", new DescData("Non-military", "S*S*------*****") },
            { "S*S*XM----*****", new DescData("Merchant", "S*S*X-----*****") },
            { "S*S*XMC---*****", new DescData("Cargo", "S*S*XM----*****") },
            { "S*S*XMR---*****", new DescData("Roll On/roll Off", "S*S*XM----*****") },
            { "S*S*XMO---*****", new DescData("Oiler/tanker", "S*S*XM----*****") },
            { "S*S*XMTU--*****", new DescData("Tug", "S*S*XM----*****") },
            { "S*S*XMF---*****", new DescData("Ferry", "S*S*XM----*****") },
            { "S*S*XMP---*****", new DescData("Passenger", "S*S*XM----*****") },
            { "S*S*XMH---*****", new DescData("Hazardous Materials (hazmat)", "S*S*XM----*****") },
            { "S*S*XMTO--*****", new DescData("Towing Vessel", "S*S*XM----*****") },
            { "S*S*XF----*****", new DescData("Fishing", "S*S*X-----*****") },
            { "S*S*XFDF--*****", new DescData("Drifter", "S*S*XF----*****") },
            { "S*S*XFDR--*****", new DescData("Dredge", "S*S*XF----*****") },
            { "S*S*XFTR--*****", new DescData("Trawler", "S*S*XF----*****") },
            { "S*S*XR----*****", new DescData("Leisure Craft", "S*S*X-----*****") },
            { "S*S*XL----*****", new DescData("Law Enforcement Vessel", "S*S*X-----*****") },
            { "S*S*XH----*****", new DescData("Hovercraft", "S*S*X-----*****") },
            { "S*S*XA----*****", new DescData("Fast Recreactional Craft", "S*S*X-----*****") },
            { "S*S*XAR---*****", new DescData("Rigid-hull Inflatable Boat", "S*S*XA----*****") },
            { "S*S*XAS---*****", new DescData("Speed Boat", "S*S*XA----*****") },
            { "S*S*XP----*****", new DescData("Personal Watercraft", "S*S*X-----*****") },
            { "S*S*O-----*****", new DescData("Own Track", "S*S*------*****") },
            { "S*U*------*****", new DescData("Subsurface Track", "S---------*****") },
            { "S*U*S-----*****", new DescData("Submarine", "S*U*------*****") },
            { "S*U*SF----*****", new DescData("Surfaced Submarine", "S*U*S-----*****") },
            { "S*U*SB----*****", new DescData("Bottomed", "S*U*S-----*****") },
            { "S*U*SR----*****", new DescData("Certain Submarine", "S*U*S-----*****") },
            { "S*U*SX----*****", new DescData("Nonsubmarine", "S*U*S-----*****") },
            { "S*U*SN----*****", new DescData("Nuclear Propulsion", "S*U*S-----*****") },
            { "S*U*SNF---*****", new DescData("Surfaced Nuclear Propulsion Submarine", "S*U*SN----*****") },
            { "S*U*SNA---*****", new DescData("Attack Submarine (ssn)", "S*U*SN----*****") },
            { "S*U*SNM---*****", new DescData("Missile Submarine (type Unknown)", "S*U*SN----*****") },
            { "S*U*SNG---*****", new DescData("Guided Missile Submarine (ssgn)", "S*U*SN----*****") },
            { "S*U*SNB---*****", new DescData("Ballistic Missile Submarine (ssbn)", "S*U*SN----*****") },
            { "S*U*SC----*****", new DescData("Conventional Propulsion", "S*U*S-----*****") },
            { "S*U*SCF---*****", new DescData("Surfaced Conventional Propulsion Submarine", "S*U*SC----*****") },
            { "S*U*SCA---*****", new DescData("Attack Submarine (ss)", "S*U*SC----*****") },
            { "S*U*SCM---*****", new DescData("Missile Submarine (type Unknown)", "S*U*SC----*****") },
            { "S*U*SCG---*****", new DescData("Guided Missile Submarine (ssg)", "S*U*SC----*****") },
            { "S*U*SCB---*****", new DescData("Ballistic Missile Submarine (ssb)", "S*U*SC----*****") },
            { "S*U*SO----*****", new DescData("Other Submersible", "S*U*S-----*****") },
            { "S*U*SOF---*****", new DescData("Surfaced Other Submersible", "S*U*SO----*****") },
            { "S*U*SU----*****", new DescData("Unmanned Underwater Vehicle (uuv)", "S*U*S-----*****") },
            { "S*U*SUM---*****", new DescData("Mine Warfare Subsurface Drone", "S*U*SU----*****") },
            { "S*U*SUS---*****", new DescData("Antisubmarine Warfare Subsurface Drone", "S*U*SU----*****") },
            { "S*U*SUN---*****", new DescData("Antisurface Warfare Subsurface Drone", "S*U*SU----*****") },
            { "S*U*S1----*****", new DescData("Possible Submarine 1", "S*U*S-----*****") },
            { "S*U*S2----*****", new DescData("Possible Submarine 2", "S*U*S-----*****") },
            { "S*U*S3----*****", new DescData("Possible Submarine 3", "S*U*S-----*****") },
            { "S*U*S4----*****", new DescData("Possible Submarine 4", "S*U*S-----*****") },
            { "S*U*SL----*****", new DescData("Probable Submarine", "S*U*S-----*****") },
            { "S*U*SK----*****", new DescData("Snorkeling Submarine", "S*U*S-----*****") },
            { "S*U*W-----*****", new DescData("Underwater Weapon", "S*U*------*****") },
            { "S*U*WT----*****", new DescData("Torpedo", "S*U*W-----*****") },
            { "S*U*WM----*****", new DescData("Sea Mine", "S*U*W-----*****") },
            { "S*U*WMD---*****", new DescData("Sea Mine Neutralized", "S*U*WM----*****") },
            { "S*U*WMG---*****", new DescData("Sea Mine (ground)", "S*U*WM----*****") },
            { "S*U*WMGD--*****", new DescData("Sea Mine (ground) Neutralized", "S*U*WMG---*****") },
            { "S*U*WMGX--*****", new DescData("Ground (bottom) Exercise Mine", "S*U*WMG---*****") },
            { "S*U*WMGE--*****", new DescData("Ground (bottom) Mine-like Echo (milec)", "S*U*WMG---*****") },
            { "S*U*WMGC--*****", new DescData("Ground (bottom) Mine-like Contact (milco)", "S*U*WMG---*****") },
            { "S*U*WMGR--*****", new DescData("Ground (bottom) Negative Reacquisition", "S*U*WMG---*****") },
            { "S*U*WMGO--*****", new DescData("Ground (bottom) Non-mine Mine-like Contact", "S*U*WMG---*****") },
            { "S*U*WMM---*****", new DescData("Sea Mine (moored)", "S*U*WM----*****") },
            { "S*U*WMMD--*****", new DescData("Sea Mine (moored) Neutralized", "S*U*WMM---*****") },
            { "S*U*WMMX--*****", new DescData("Moored Exercise Mine", "S*U*WMM---*****") },
            { "S*U*WMME--*****", new DescData("Moored Mine-like Echo", "S*U*WMM---*****") },
            { "S*U*WMMC--*****", new DescData("Moored Mine-like Contact", "S*U*WMM---*****") },
            { "S*U*WMMR--*****", new DescData("Moored Negative Reacquisition", "S*U*WMM---*****") },
            { "S*U*WMMO--*****", new DescData("Moored Non-mine Mine-like Object", "S*U*WMM---*****") },
            { "S*U*WMF---*****", new DescData("Sea Mine (floating)", "S*U*WM----*****") },
            { "S*U*WMFD--*****", new DescData("Sea Mine (floating) Neutralized", "S*U*WMF---*****") },
            { "S*U*WMFX--*****", new DescData("Floating Exercise Mine", "S*U*WMF---*****") },
            { "S*U*WMFE--*****", new DescData("Floating Mine-like Echo (milec)", "S*U*WMF---*****") },
            { "S*U*WMFC--*****", new DescData("Floating Mine-like Contact (milco)", "S*U*WMF---*****") },
            { "S*U*WMFR--*****", new DescData("Floating Negative Reacquisition", "S*U*WMF---*****") },
            { "S*U*WMFO--*****", new DescData("Floating Non-mine Mine-like Contact", "S*U*WMF---*****") },
            { "S*U*WMO---*****", new DescData("Sea Mine (other Position)", "S*U*WM----*****") },
            { "S*U*WMOD--*****", new DescData("Sea Mine (other Position) Neutralized", "S*U*WMO---*****") },
            { "S*U*WMX---*****", new DescData("General Exercise Mine", "S*U*WM----*****") },
            { "S*U*WME---*****", new DescData("General Mine-like Echo (milec)", "S*U*WM----*****") },
            { "S*U*WMA---*****", new DescData("General Mine Anchor", "S*U*WM----*****") },
            { "S*U*WMC---*****", new DescData("General Mine-like Contact (milco)", "S*U*WM----*****") },
            { "S*U*WMR---*****", new DescData("General Negative Reacquisition", "S*U*WM----*****") },
            { "S*U*WMB---*****", new DescData("General Obstructor", "S*U*WM----*****") },
            { "S*U*WMBD--*****", new DescData("General Neutralized Obstructor", "S*U*WMB---*****") },
            { "S*U*WMN---*****", new DescData("General Non-mine Mine-like Object", "S*U*WM----*****") },
            { "S*U*WMS---*****", new DescData("Rising Mine", "S*U*WM----*****") },
            { "S*U*WMSX--*****", new DescData("Rising Exercise Mine", "S*U*WMS---*****") },
            { "S*U*WMSD--*****", new DescData("Rising Neutralized Mine", "S*U*WMS---*****") },
            { "S*U*WD----*****", new DescData("Underwater Decoy", "S*U*------*****") },
            { "S*U*WDM---*****", new DescData("Sea Mine Decoy", "S*U*WD----*****") },
            { "S*U*WDMG--*****", new DescData("Ground (bottom) Decoy", "S*U*WDM---*****") },
            { "S*U*WDMM--*****", new DescData("Moored Decoy", "S*U*WDM---*****") },
            { "S*U*N-----*****", new DescData("Non-submarine", "S*U*------*****") },
            { "S*U*ND----*****", new DescData("Diver", "S*U*N-----*****") },
            { "S*U*E-----*****", new DescData("Environmental Report Location", "S*U*------*****") },
            { "S*U*V-----*****", new DescData("Dive Report Location", "S*U*------*****") },
            { "S*U*X-----*****", new DescData("Unexploded Ordnance Area", "S*U*------*****") },
            { "S*F*------*****", new DescData("Special Operations Forces (SOF) Unit", "S---------*****") },
            { "S*F*A-----*****", new DescData("Sof Unit Aviation", "S*F*------*****") },
            { "S*F*AF----*****", new DescData("Sof Unit Fixed Wing", "S*F*A-----*****") },
            { "S*F*AFA---*****", new DescData("Sof Unit Attack", "S*F*AF----*****") },
            { "S*F*AFK---*****", new DescData("Sof Unit Refuel", "S*F*AF----*****") },
            { "S*F*AFU---*****", new DescData("Sof Unit Utility", "S*F*AF----*****") },
            { "S*F*AFUL--*****", new DescData("Sof Unit Utility (light)", "S*F*AFU---*****") },
            { "S*F*AFUM--*****", new DescData("Sof Unit Utility (medium)", "S*F*AFU---*****") },
            { "S*F*AFUH--*****", new DescData("Sof Unit Utility (heavy)", "S*F*AFU---*****") },
            { "S*F*AV----*****", new DescData("Sof Unit V/stol", "S*F*A-----*****") },
            { "S*F*AH----*****", new DescData("Sof Unit Rotary Wing", "S*F*A-----*****") },
            { "S*F*AHH---*****", new DescData("Sof Unit Combat Search And Rescue", "S*F*AH----*****") },
            { "S*F*AHA---*****", new DescData("Sof Unit Attack", "S*F*AH----*****") },
            { "S*F*AHU---*****", new DescData("Sof Unit Utility", "S*F*AH----*****") },
            { "S*F*AHUL--*****", new DescData("Sof Unit Utility (light)", "S*F*AHU---*****") },
            { "S*F*AHUM--*****", new DescData("Sof Unit Utility (medium)", "S*F*AHU---*****") },
            { "S*F*AHUH--*****", new DescData("Sof Unit Utility (heavy)", "S*F*AHU---*****") },
            { "S*F*N-----*****", new DescData("Sof Unit Sof Unit Naval", "S*F*------*****") },
            { "S*F*NS----*****", new DescData("Sof Unit Seal", "S*F*N-----*****") },
            { "S*F*NU----*****", new DescData("Sof Unit Underwater Demolition Team", "S*F*N-----*****") },
            { "S*F*NB----*****", new DescData("Sof Unit Special Boat", "S*F*N-----*****") },
            { "S*F*NN----*****", new DescData("Sof Unit Special Ssnr", "S*F*N-----*****") },
            { "S*F*G-----*****", new DescData("Sof Unit Ground", "S*F*------*****") },
            { "S*F*GS----*****", new DescData("Sof Unit Special Forces", "S*F*G-----*****") },
            { "S*F*GR----*****", new DescData("Sof Unit Ranger", "S*F*G-----*****") },
            { "S*F*GP----*****", new DescData("Sof Unit Psychological Operations (psyop)", "S*F*G-----*****") },
            { "S*F*GPA---*****", new DescData("Sof Unit Fixed Wing Aviation", "S*F*GP----*****") },
            { "S*F*GC----*****", new DescData("Sof Unit Civil Affairs", "S*F*G-----*****") },
            { "S*F*B-----*****", new DescData("Sof Unit Support", "S*F*------*****") }
        };

        /// <summary>
        /// A dictionary of all the templates in Appendix B.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryB = new Dictionary<string, DescData>
        {
            { "G*------------X", new DescData("Tactical Graphics", null) },
            { "G*T*------****X", new DescData("Tasks", "G*------------X") },
            { "G*T*B-----****X", new DescData("Block", "G*T*------****X") },
            { "G*T*H-----****X", new DescData("Breach", "G*T*------****X") },
            { "G*T*Y-----****X", new DescData("Bypass", "G*T*------****X") },
            { "G*T*C-----****X", new DescData("Canalize", "G*T*------****X") },
            { "G*T*X-----****X", new DescData("Clear", "G*T*------****X") },
            { "G*T*J-----****X", new DescData("Contain", "G*T*------****X") },
            { "G*T*K-----****X", new DescData("Counterattack (catk)", "G*T*------****X") },
            { "G*T*KF----****X", new DescData("Counterattack By Fire", "G*T*K-----****X") },
            { "G*T*L-----****X", new DescData("Delay", "G*T*------****X") },
            { "G*T*D-----****X", new DescData("Destroy", "G*T*------****X") },
            { "G*T*T-----****X", new DescData("Disrupt", "G*T*------****X") },
            { "G*T*F-----****X", new DescData("Fix", "G*T*------****X") },
            { "G*T*A-----****X", new DescData("Follow And Assume", "G*T*------****X") },
            { "G*T*AS----****X", new DescData("Follow And Support", "G*T*A-----****X") },
            { "G*T*I-----****X", new DescData("Interdict", "G*T*------****X") },
            { "G*T*E-----****X", new DescData("Isolate", "G*T*------****X") },
            { "G*T*N-----****X", new DescData("Neutralize", "G*T*------****X") },
            { "G*T*O-----****X", new DescData("Occupy", "G*T*------****X") },
            { "G*T*P-----****X", new DescData("Penetrate", "G*T*------****X") },
            { "G*T*R-----****X", new DescData("Relief In Place (rip)", "G*T*------****X") },
            { "G*T*Q-----****X", new DescData("Retain", "G*T*------****X") },
            { "G*T*M-----****X", new DescData("Retirement", "G*T*------****X") },
            { "G*T*S-----****X", new DescData("Secure", "G*T*------****X") },
            { "G-T*U---------X", new DescData("Security", "G*T*------****X") },
            { "G*T*US----****X", new DescData("Screen", "G-T*U---------X") },
            { "G*T*UG----****X", new DescData("Guard", "G-T*U---------X") },
            { "G*T*UC----****X", new DescData("Cover", "G-T*U---------X") },
            { "G*T*Z-----****X", new DescData("Seize", "G*T*------****X") },
            { "G*T*W-----****X", new DescData("Withdraw", "G*T*------****X") },
            { "G*T*WP----****X", new DescData("Withdraw Under Pressure", "G*T*W-----****X") },
            { "G*G*------****X", new DescData("Command And Control And General Maneuver", "G*------------X") },
            { "G*G*G-----****X", new DescData("General", "G*G*------****X") },
            { "G*G*GP----****X", new DescData("Points", "G*G*G-----****X") },
            { "G*G*GPU---****X", new DescData("Under Sea Warfare", "G*G*GP----****X") },
            { "G*G*GPUU--****X", new DescData("Underwater", "G*G*GPU---****X") },
            { "G*G*GPUUD-****X", new DescData("Datum", "G*G*GPUU--****X") },
            { "G*G*GPUUB-****X", new DescData("Brief Contact", "G*G*GPUU--****X") },
            { "G*G*GPUUL-****X", new DescData("Lost Contact", "G*G*GPUU--****X") },
            { "G*G*GPUUS-****X", new DescData("Sinker", "G*G*GPUU--****X") },
            { "G*G*GPUY--****X", new DescData("Sonobuoy", "G*G*GPU---****X") },
            { "G*G*GPUYP-****X", new DescData("Pattern Center", "G*G*GPUY--****X") },
            { "G*G*GPUYD-****X", new DescData("Directional Frequency Analyzing And Recording (difar)", "G*G*GPUY--****X") },
            { "G*G*GPUYL-****X", new DescData("Low Frequency Analyzing And Recording (lofar)", "G*G*GPUY--****X") },
            { "G*G*GPUYC-****X", new DescData("Command Active Sonobuoy System (cass)", "G*G*GPUY--****X") },
            { "G*G*GPUYS-****X", new DescData("Directional Command Active Sonobuoy System (dicass)", "G*G*GPUY--****X") },
            { "G*G*GPUYB-****X", new DescData("Bathythermograph Transmitting (bt)", "G*G*GPUY--****X") },
            { "G*G*GPUYA-****X", new DescData("Anm", "G*G*GPUY--****X") },
            { "G*G*GPUYV-****X", new DescData("Vertical Line Array Difar (vlad)", "G*G*GPUY--****X") },
            { "G*G*GPUYT-****X", new DescData("Atac", "G*G*GPUY--****X") },
            { "G*G*GPUYR-****X", new DescData("Range Only (ro)", "G*G*GPUY--****X") },
            { "G*G*GPUYK-****X", new DescData("Kingpin", "G*G*GPUY--****X") },
            { "G*G*GPUYX-*****", new DescData("Sonobuoy-expired", "G*G*GPUY--****X") },
            { "G*G*GPUS--****X", new DescData("Search", "G*G*GPU---****X") },
            { "G*G*GPUSA-****X", new DescData("Search Area", "G*G*GPUS--****X") },
            { "G*G*GPUSD-****X", new DescData("Dip Position", "G*G*GPUS--****X") },
            { "G*G*GPUSC-****X", new DescData("Search Center", "G*G*GPUS--****X") },
            { "G*G*GPR---****X", new DescData("Reference Point", "G*G*GP----****X") },
            { "G*G*GPRN--****X", new DescData("Navigational Reference Point", "G*G*GPR---****X") },
            { "G*G*GPRS--****X", new DescData("Special Point", "G*G*GPR---****X") },
            { "G*G*GPRD--****X", new DescData("Dlrp", "G*G*GPR---****X") },
            { "G*G*GPRP--****X", new DescData("Point Of Intended Movement (pim)", "G*G*GPR---****X") },
            { "G*G*GPRM--****X", new DescData("Marshall Point", "G*G*GPR---****X") },
            { "G*G*GPRW--****X", new DescData("Waypoint", "G*G*GPR---****X") },
            { "G*G*GPRC--****X", new DescData("Corridor Tab", "G*G*GPR---****X") },
            { "G*G*GPRI--****X", new DescData("Point Of Interest", "G*G*GPR---****X") },
            { "G*G*GPW---****X", new DescData("Weapon", "G*G*GP----****X") },
            { "G*G*GPWA--****X", new DescData("Aim Point", "G*G*GPW---****X") },
            { "G*G*GPWD--****X", new DescData("Drop Point", "G*G*GPW---****X") },
            { "G*G*GPWE--****X", new DescData("Entry Point", "G*G*GPW---****X") },
            { "G*G*GPWG--****X", new DescData("Ground Zero", "G*G*GPW---****X") },
            { "G*G*GPWM--****X", new DescData("Msl Detect Point", "G*G*GPW---****X") },
            { "G*G*GPWI--****X", new DescData("Impact Point", "G*G*GPW---****X") },
            { "G*G*GPWP--****X", new DescData("Predicted Impact Point", "G*G*GPW---****X") },
            { "G*G*GPF---****X", new DescData("Formation", "G*G*GP----****X") },
            { "G*G*GPH---****X", new DescData("Harbor (general)", "G*G*GP----****X") },
            { "G*G*GPHQ--****X", new DescData("Point Q", "G*G*GPH---****X") },
            { "G*G*GPHA--****X", new DescData("Point A", "G*G*GPH---****X") },
            { "G*G*GPHY--****X", new DescData("Point Y", "G*G*GPH---****X") },
            { "G*G*GPHX--****X", new DescData("Point X", "G*G*GPH---****X") },
            { "G*G*GPO---****X", new DescData("Route", "G*G*GP----****X") },
            { "G*G*GPOZ--****X", new DescData("Rendezvous", "G*G*GPO---****X") },
            { "G*G*GPOD--****X", new DescData("Diversions", "G*G*GPO---****X") },
            { "G*G*GPOW--****X", new DescData("Waypoint", "G*G*GPO---****X") },
            { "G*G*GPOP--****X", new DescData("Pim", "G*G*GPO---****X") },
            { "G*G*GPOR--****X", new DescData("Point R", "G*G*GPO---****X") },
            { "G*G*GPA---****X", new DescData("Air Control", "G*G*GP----****X") },
            { "G*G*GPAP--****X", new DescData("Combat Air Patrol (cap)", "G*G*GPA---****X") },
            { "G*G*GPAW--****X", new DescData("Airborne Early Warning (aew)", "G*G*GPA---****X") },
            { "G*G*GPAK--****X", new DescData("Tanking", "G*G*GPA---****X") },
            { "G*G*GPAA--****X", new DescData("Antisubmarine Warfare, Fixed Wing", "G*G*GPA---****X") },
            { "G*G*GPAH--****X", new DescData("Antisubmarine Warfare, Rotary Wing", "G*G*GPA---****X") },
            { "G*G*GPAB--****X", new DescData("Sucap - Fixed Wing", "G*G*GPA---****X") },
            { "G*G*GPAC--****X", new DescData("Sucap - Rotary Wing", "G*G*GPA---****X") },
            { "G*G*GPAD--****X", new DescData("Miw - Fixed Wing", "G*G*GPA---****X") },
            { "G*G*GPAE--****X", new DescData("Miw - Rotary Wing", "G*G*GPA---****X") },
            { "G*G*GPAS--****X", new DescData("Strike Ip", "G*G*GPA---****X") },
            { "G*G*GPAT--****X", new DescData("Tacan", "G*G*GPA---****X") },
            { "G*G*GPAO--****X", new DescData("Tomcat", "G*G*GPA---****X") },
            { "G*G*GPAR--****X", new DescData("Rescue", "G*G*GPA---****X") },
            { "G*G*GPAL--****X", new DescData("Replenish", "G*G*GPA---****X") },
            { "G*G*GPAF--****X", new DescData("Unmanned Aerial System (uas/ua)", "G*G*GPA---****X") },
            { "G*G*GPAG--****X", new DescData("Vtua", "G*G*GPA---****X") },
            { "G*G*GPAI--****X", new DescData("Orbit", "G*G*GPA---****X") },
            { "G*G*GPAJ--****X", new DescData("Orbit - Figure Eight", "G*G*GPA---****X") },
            { "G*G*GPAM--****X", new DescData("Orbit - Race Track", "G*G*GPA---****X") },
            { "G*G*GPAN--****X", new DescData("Orbit - Random, Closed", "G*G*GPA---****X") },
            { "G*G*GPP---****X", new DescData("Action Points (general)", "G*G*GP----****X") },
            { "G*G*GPPK--****X", new DescData("Check Point", "G*G*GPP---****X") },
            { "G*G*GPPC--****X", new DescData("Contact Point", "G*G*GPP---****X") },
            { "G*G*GPPO--****X", new DescData("Coordination Point", "G*G*GPP---****X") },
            { "G*G*GPPD--****X", new DescData("Decision Point", "G*G*GPP---****X") },
            { "G*G*GPPL--****X", new DescData("Linkup Point", "G*G*GPP---****X") },
            { "G*G*GPPP--****X", new DescData("Passage Point", "G*G*GPP---****X") },
            { "G*G*GPPR--****X", new DescData("Rally Point", "G*G*GPP---****X") },
            { "G*G*GPPE--****X", new DescData("Release Point", "G*G*GPP---****X") },
            { "G*G*GPPS--****X", new DescData("Start Point", "G*G*GPP---****X") },
            { "G*G*GPPA--****X", new DescData("Amnesty Point", "G*G*GPP---****X") },
            { "G*G*GPPW--****X", new DescData("Waypoint", "G*G*GPP---****X") },
            { "G*G*GPC---****X", new DescData("Sea Surface Control Station", "G*G*GP----****X") },
            { "G*G*GPCU--****X", new DescData("Unmanned Surface Vehicle (usv) Control Station", "G*G*GPC---****X") },
            { "G*G*GPCUR-****X", new DescData("Remote Multimission Vehicle (rmv) Usv Control Station", "G*G*GPCU--****X") },
            { "G*G*GPCUA-****X", new DescData("Usv - Antisubmarine Warfare Control Station", "G*G*GPCU--****X") },
            { "G*G*GPCUS-****X", new DescData("Usv - Surface Warfare Control Station", "G*G*GPCU--****X") },
            { "G*G*GPCUM-****X", new DescData("Usv - Mine Warfare Control Station", "G*G*GPCU--****X") },
            { "G*G*GPCA--****X", new DescData("Asw Control Station", "G*G*GPC---****X") },
            { "G*G*GPCS--****X", new DescData("Suw Control Station", "G*G*GPC---****X") },
            { "G*G*GPCM--****X", new DescData("Miw Control Station", "G*G*GPC---****X") },
            { "G*G*GPCP--****X", new DescData("Picket Control Station", "G*G*GPC---****X") },
            { "G*G*GPCR--****X", new DescData("Rendezvous Control Point", "G*G*GPC---****X") },
            { "G*G*GPCC--****X", new DescData("Rescue Control Point", "G*G*GPC---****X") },
            { "G*G*GPCE--****X", new DescData("Replenishment Control Point", "G*G*GPC---****X") },
            { "G*G*GPCN--****X", new DescData("Noncombatant Control Station", "G*G*GPC---****X") },
            { "G*G*GPB---****X", new DescData("Subsurface Control Station", "G*G*GP----****X") },
            { "G*G*GPBU--****X", new DescData("Unmanned Underwater Vehicle (uuv) Control Station", "G*G*GPB---****X") },
            { "G*G*GPBUA-****X", new DescData("Uuv - Antisubmarine Warfare Control Station", "G*G*GPBU--****X") },
            { "G*G*GPBUS-****X", new DescData("Uuv - Surface Warfare Control Station", "G*G*GPBU--****X") },
            { "G*G*GPBUM-****X", new DescData("Uuv - Mine Warfare Control Station", "G*G*GPBU--****X") },
            { "G*G*GPBS--****X", new DescData("Submarine Control Station", "G*G*GPB---****X") },
            { "G*G*GPBSA-****X", new DescData("Asw Submarine Control Station", "G*G*GPBS--****X") },
            { "G*G*GL----****X", new DescData("Lines", "G*G*G-----****X") },
            { "G*G*GLB---****X", new DescData("Boundaries", "G*G*GL----****X") },
            { "G*G*GLF---****X", new DescData("Forward Line Of Own Troops (flot)", "G*G*GL----****X") },
            { "G*G*GLC---****X", new DescData("Line Of Contact", "G*G*GL----****X") },
            { "G*G*GLP---****X", new DescData("Phase Line", "G*G*GL----****X") },
            { "G*G*GLL---****X", new DescData("Light Line", "G*G*GL----****X") },
            { "G*G*GA----****X", new DescData("Areas", "G*G*G-----****X") },
            { "G*G*GAG---****X", new DescData("General Area", "G*G*GA----****X") },
            { "G*G*GAA---****X", new DescData("Assembly Area", "G*G*GA----****X") },
            { "G*G*GAE---****X", new DescData("Engagement Area", "G*G*GA----****X") },
            { "G*G*GAF---****X", new DescData("Fortified Area", "G*G*GA----****X") },
            { "G*G*GAD---****X", new DescData("Drop Zone", "G*G*GA----****X") },
            { "G*G*GAX---****X", new DescData("Extraction Zone (ez)", "G*G*GA----****X") },
            { "G*G*GAL---****X", new DescData("Landing Zone (lz)", "G*G*GA----****X") },
            { "G*G*GAP---****X", new DescData("Pickup Zone (pz)", "G*G*GA----****X") },
            { "G*G*GAS---****X", new DescData("Search Area/reconnaissance Area", "G*G*GA----****X") },
            { "G*G*GAY---****X", new DescData("Limited Access Area", "G*G*GA----****X") },
            { "G*G*GAZ---****X", new DescData("Airfield Zone", "G*G*GA----****X") },
            { "G*G*A-----****X", new DescData("Aviation", "G*G*------****X") },
            { "G*G*AP----****X", new DescData("Points", "G*G*A-----****X") },
            { "G*G*APP---****X", new DescData("Air Control Point (acp)", "G*G*AP----****X") },
            { "G*G*APC---****X", new DescData("Communications Checkpoint (ccp)", "G*G*AP----****X") },
            { "G*G*APU---****X", new DescData("Pull-up Point (pup)", "G*G*AP----****X") },
            { "G*G*APD---****X", new DescData("Downed Aircrew Pickup Point", "G*G*AP----****X") },
            { "G*G*AL----****X", new DescData("Lines", "G*G*A-----****X") },
            { "G*G*ALC---****X", new DescData("Air Corridor", "G*G*AL----****X") },
            { "G*G*ALM---****X", new DescData("Minimum Risk Route (mrr)", "G*G*AL----****X") },
            { "G*G*ALS---****X", new DescData("Standard-use Army Aircraft Flight Route (saafr)", "G*G*AL----****X") },
            { "G*G*ALU---****X", new DescData("Unmanned Aircraft (ua) Route", "G*G*AL----****X") },
            { "G*G*ALL---****X", new DescData("Low Level Transit Route (lltr)", "G*G*AL----****X") },
            { "G*G*AA----****X", new DescData("Areas", "G*G*A-----****X") },
            { "G*G*AAR---****X", new DescData("Restricted Operations Zone (roz)", "G*G*AA----****X") },
            { "G*G*AAF---****X", new DescData("Short-range Air Defense Engagement Zone (shoradez)", "G*G*AA----****X") },
            { "G*G*AAH---****X", new DescData("High Density Airspace Control Zone (hidacz)", "G*G*AA----****X") },
            { "G*G*AAM---****X", new DescData("Missile Engagement Zone (mez)", "G*G*AA----****X") },
            { "G*G*AAML--****X", new DescData("Low Altitude Mez", "G*G*AAM---****X") },
            { "G*G*AAMH--****X", new DescData("High Altitude Mez", "G*G*AAM---****X") },
            { "G*G*AAW---****X", new DescData("Weapons Free Zone", "G*G*AA----****X") },
            { "G*G*P-----****X", new DescData("Deception", "G*G*------****X") },
            { "G*G*PD----****X", new DescData("Dummy (deception/decoy)", "G*G*P-----****X") },
            { "G*G*PA----****X", new DescData("Axis Of Advance For Feint", "G*G*P-----****X") },
            { "G*G*PF----****X", new DescData("Direction Of Attack For Feint", "G*G*P-----****X") },
            { "G*G*PM----****X", new DescData("Decoy Mined Area", "G*G*P-----****X") },
            { "G*G*PY----****X", new DescData("Decoy Mined Area, Fenced", "G*G*P-----****X") },
            { "G*G*PN----****X", new DescData("Dummy Minefield (static)", "G*G*P-----****X") },
            { "G*G*PC----****X", new DescData("Dummy Minefield (dynamic)", "G*G*P-----****X") },
            { "G*G*D-----****X", new DescData("Defense", "G*G*------****X") },
            { "G*G*DP----****X", new DescData("Points", "G*G*D-----****X") },
            { "G*G*DPT---****X", new DescData("Target Reference Point (trp)", "G*G*DP----****X") },
            { "G*G*DPO---****X", new DescData("Observation Post/outpost", "G*G*DP----****X") },
            { "G*G*DPOC--****X", new DescData("Combat Outpost", "G*G*DPO---****X") },
            { "G*G*DPOR--****X", new DescData("Observation Post Occupied By Dismounted Scouts Or Reconnaissance", "G*G*DPO---****X") },
            { "G*G*DPOF--****X", new DescData("Forward Observer Position", "G*G*DPO---****X") },
            { "G*G*DPOS--****X", new DescData("Sensor Outpost/listening Post (op/lp)", "G*G*DPO---****X") },
            { "G*G*DPON--****X", new DescData("Cbrn Observation Post (dismounted)", "G*G*DPO---****X") },
            { "G*G*DL----****X", new DescData("Lines", "G*G*D-----****X") },
            { "G*G*DLF---****X", new DescData("Forward Edge Of Battle Area (feba)", "G*G*DL----****X") },
            { "G*G*DLP---****X", new DescData("Principal Direction Of Fire (pdf)", "G*G*DL----****X") },
            { "G*G*DA----****X", new DescData("Areas", "G*G*D-----****X") },
            { "G*G*DAB---****X", new DescData("Battle Position", "G*G*DA----****X") },
            { "G*G*DABP--****X", new DescData("Prepared But Not Occupied", "G*G*DAB---****X") },
            { "G*G*DAE---****X", new DescData("Engagement Area", "G*G*DA----****X") },
            { "G*G*O-----****X", new DescData("Offense", "G*G*------****X") },
            { "G*G*OP----****X", new DescData("Points", "G*G*O-----****X") },
            { "G*G*OPP---****X", new DescData("Point Of Departure", "G*G*OP----****X") },
            { "G*G*OL----****X", new DescData("Lines", "G*G*O-----****X") },
            { "G*G*OLA---****X", new DescData("Axis Of Advance", "G*G*OL----****X") },
            { "G*G*OLAV--****X", new DescData("Aviation", "G*G*OLA---****X") },
            { "G*G*OLAA--****X", new DescData("Airborne", "G*G*OLA---****X") },
            { "G*G*OLAR--****X", new DescData("Attack, Rotary Wing", "G*G*OLA---****X") },
            { "G*G*OLAG--****X", new DescData("Ground", "G*G*OLA---****X") },
            { "G*G*OLAGM-****X", new DescData("Main Attack", "G*G*OLAG--****X") },
            { "G*G*OLAGS-****X", new DescData("Supporting Attack", "G*G*OLAG--****X") },
            { "G*G*OLK---****X", new DescData("Direction Of Attack", "G*G*OL----****X") },
            { "G*G*OLKA--****X", new DescData("Aviation", "G*G*OLK---****X") },
            { "G*G*OLKG--****X", new DescData("Ground", "G*G*OLK---****X") },
            { "G*G*OLKGM-****X", new DescData("Main Attack", "G*G*OLKG--****X") },
            { "G*G*OLKGS-****X", new DescData("Supporting Attack", "G*G*OLKG--****X") },
            { "G*G*OLF---****X", new DescData("Final Coordination Line", "G*G*OL----****X") },
            { "G*G*OLI---****X", new DescData("Infiltration Lane", "G*G*OL----****X") },
            { "G*G*OLL---****X", new DescData("Limit Of Advance", "G*G*OL----****X") },
            { "G*G*OLT---****X", new DescData("Line Of Departure", "G*G*OL----****X") },
            { "G*G*OLC---****X", new DescData("Line Of Departure/line Of Contact (ld/lc)", "G*G*OL----****X") },
            { "G*G*OLP---****X", new DescData("Probable Line Of Deployment (pld)", "G*G*OL----****X") },
            { "G*G*OA----****X", new DescData("Areas", "G*G*O-----****X") },
            { "G*G*OAA---****X", new DescData("Assault Position", "G*G*OA----****X") },
            { "G*G*OAK---****X", new DescData("Attack Position", "G*G*OA----****X") },
            { "G*G*OAF---****X", new DescData("Attack By Fire Position", "G*G*OA----****X") },
            { "G*G*OAS---****X", new DescData("Support By Fire Position", "G*G*OA----****X") },
            { "G*G*OAO---****X", new DescData("Objective", "G*G*OA----****X") },
            { "G*G*OAP---****X", new DescData("Penetration Box", "G*G*OA----****X") },
            { "G*G*S-----****X", new DescData("Special", "G*G*------****X") },
            { "G*G*SL----****X", new DescData("Line", "G*G*S-----****X") },
            { "G*G*SLA---****X", new DescData("Ambush", "G*G*SL----****X") },
            { "G*G*SLH---****X", new DescData("Holding Line", "G*G*SL----****X") },
            { "G*G*SLR---****X", new DescData("Release Line", "G*G*SL----****X") },
            { "G*G*SLB---****X", new DescData("Bridgehead", "G*G*SL----****X") },
            { "G*G*SA----****X", new DescData("Area", "G*G*S-----****X") },
            { "G*G*SAO---****X", new DescData("Area Of Operations (ao)", "G*G*SA----****X") },
            { "G*G*SAA---****X", new DescData("Airhead", "G*G*SA----****X") },
            { "G*G*SAE---****X", new DescData("Encirclement", "G*G*SA----****X") },
            { "G*G*SAN---****X", new DescData("Named Area Of Interest (nai)", "G*G*SA----****X") },
            { "G*G*SAT---****X", new DescData("Targeted Area Of Interest (tai)", "G*G*SA----****X") },
            { "G*M*------****X", new DescData("Mobility/survivability", "G*------------X") },
            { "G*M*O-----****X", new DescData("Obstacles", "G*M*------****X") },
            { "G*M*OG----****X", new DescData("General", "G*M*O-----****X") },
            { "G*M*OGB---****X", new DescData("Belt", "G*M*OG----****X") },
            { "G*M*OGL---****X", new DescData("Line", "G*M*OG----****X") },
            { "G*M*OGZ---****X", new DescData("Zone", "G*M*OG----****X") },
            { "G*M*OGF---****X", new DescData("Obstacle Free Area", "G*M*OG----****X") },
            { "G*M*OGR---****X", new DescData("Obstacle Restricted Area", "G*M*OG----****X") },
            { "G*M*OS----****X", new DescData("Abatis", "G*M*O-----****X") },
            { "G*M*OA----****X", new DescData("Antitank Obstacles", "G*M*O-----****X") },
            { "G*M*OAD---****X", new DescData("Antitank Ditch", "G*M*OA----****X") },
            { "G*M*OADU--****X", new DescData("Under Construction", "G*M*OAD---****X") },
            { "G*M*OADC--****X", new DescData("Complete", "G*M*OAD---****X") },
            { "G*M*OAR---****X", new DescData("Antitank Ditch Reinforced With Antitank Mines", "G*M*OA----****X") },
            { "G*M*OAO---****X", new DescData("Antitank Obstacles: Tetrahedrons, Dragons Teeth, And Other Similar Obstacles", "G*M*OA----****X") },
            { "G*M*OAOF--****X", new DescData("Fixed And Prefabricated", "G*M*OAO---****X") },
            { "G*M*OAOM--****X", new DescData("Moveable", "G*M*OAO---****X") },
            { "G*M*OAOP--****X", new DescData("Moveable And Prefabricated", "G*M*OAO---****X") },
            { "G*M*OAW---****X", new DescData("Antitank Wall", "G*M*OA----****X") },
            { "G*M*OB----****X", new DescData("Booby Trap", "G*M*O-----****X") },
            { "G*M*OM----****X", new DescData("Mines", "G*M*O-----****X") },
            { "G*M*OMU---****X", new DescData("Unspecified Mine", "G*M*OM----****X") },
            { "G*M*OMT---****X", new DescData("Antitank Mine (at)", "G*M*OM----****X") },
            { "G*M*OMD---****X", new DescData("Antitank Mine With Antihandling Device", "G*M*OM----****X") },
            { "G*M*OME---****X", new DescData("Antitank Mine (directional)", "G*M*OM----****X") },
            { "G*M*OMP---****X", new DescData("Antipersonnel (ap) Mines", "G*M*OM----****X") },
            { "G*M*OMW---****X", new DescData("Wide Area Mines", "G*M*OM----****X") },
            { "G*M*OMC---****X", new DescData("Mine Cluster", "G*M*OM----****X") },
            { "G*M*OF----****X", new DescData("Minefields", "G*M*O-----****X") },
            { "G*M*OFS---****X", new DescData("Static Depiction", "G*M*OF----****X") },
            { "G*M*OFD---****X", new DescData("Dynamic Depiction", "G*M*OF----****X") },
            { "G*M*OFG---****X", new DescData("Gap", "G*M*OF----****X") },
            { "G*M*OFA---****X", new DescData("Mined Area", "G*M*OF----****X") },
            { "G*M*OE----****X", new DescData("Obstacle Effect", "G*M*O-----****X") },
            { "G*M*OEB---****X", new DescData("Block", "G*M*OE----****X") },
            { "G*M*OEF---****X", new DescData("Fix", "G*M*OE----****X") },
            { "G*M*OET---****X", new DescData("Turn", "G*M*OE----****X") },
            { "G*M*OED---****X", new DescData("Disrupt", "G*M*OE----****X") },
            { "G*M*OU----****X", new DescData("Unexploded Ordnance Area (uxo)", "G*M*O-----****X") },
            { "G*M*OR----****X", new DescData("Roadblocks, Craters, And Blown Bridges", "G*M*O-----****X") },
            { "G*M*ORP---****X", new DescData("Planned", "G*M*OR----****X") },
            { "G*M*ORS---****X", new DescData("Explosives, State Of Readiness 1 (safe)", "G*M*OR----****X") },
            { "G*M*ORA---****X", new DescData("Explosives, State Of Readiness 2 (armed-but Passable)", "G*M*OR----****X") },
            { "G*M*ORC---****X", new DescData("Roadblock Complete (executed)", "G*M*OR----****X") },
            { "G*M*OT----****X", new DescData("Trip Wire", "G*M*O-----****X") },
            { "G*M*OW----****X", new DescData("Wire Obstacle", "G*M*O-----****X") },
            { "G*M*OWU---****X", new DescData("Unspecified", "G*M*OW----****X") },
            { "G*M*OWS---****X", new DescData("Single Fence", "G*M*OW----****X") },
            { "G*M*OWD---****X", new DescData("Double Fence", "G*M*OW----****X") },
            { "G*M*OWA---****X", new DescData("Double Apron Fence", "G*M*OW----****X") },
            { "G*M*OWL---****X", new DescData("Low Wire Fence", "G*M*OW----****X") },
            { "G*M*OWH---****X", new DescData("High Wire Fence", "G*M*OW----****X") },
            { "G*M*OWC---****X", new DescData("Concertina", "G*M*OW----****X") },
            { "G*M*OWCS--****X", new DescData("Single Concertina", "G*M*OWC---****X") },
            { "G*M*OWCD--****X", new DescData("Double Strand Concertina", "G*M*OWC---****X") },
            { "G*M*OWCT--****X", new DescData("Triple Strand Concertina", "G*M*OWC---****X") },
            { "G*M*OH----****X", new DescData("Aviation", "G*M*O-----****X") },
            { "G*M*OHT---****X", new DescData("Tower", "G*M*OH----****X") },
            { "G*M*OHTL--****X", new DescData("Low", "G*M*OHT---****X") },
            { "G*M*OHTH--****X", new DescData("High", "G*M*OHT---****X") },
            { "G*M*OHO---****X", new DescData("Overhead Wire/power Line", "G*M*OH----****X") },
            { "G*M*B-----****X", new DescData("Obstacle Bypass", "G*M*------****X") },
            { "G*M*BD----****X", new DescData("Obstacle Bypass Difficulty", "G*M*B-----****X") },
            { "G*M*BDE---****X", new DescData("Bypass Easy", "G*M*BD----****X") },
            { "G*M*BDD---****X", new DescData("Bypass Difficult", "G*M*BD----****X") },
            { "G*M*BDI---****X", new DescData("Bypass Impossible", "G*M*BD----****X") },
            { "G*M*BC----****X", new DescData("Crossing Site/water Crossing", "G*M*B-----****X") },
            { "G*M*BCA---****X", new DescData("Assault Crossing Area", "G*M*BC----****X") },
            { "G*M*BCB---****X", new DescData("Bridge Or Gap", "G*M*BC----****X") },
            { "G*M*BCF---****X", new DescData("Ferry", "G*M*BC----****X") },
            { "G*M*BCE---****X", new DescData("Ford Easy", "G*M*BC----****X") },
            { "G*M*BCD---****X", new DescData("Ford Difficult", "G*M*BC----****X") },
            { "G*M*BCL---****X", new DescData("Lane", "G*M*BC----****X") },
            { "G*M*BCR---****X", new DescData("Raft Site", "G*M*BC----****X") },
            { "G*M*BCP---****X", new DescData("Engineer Regulating Point", "G*M*BC----****X") },
            { "G*M*S-----****X", new DescData("Survivability", "G*M*------****X") },
            { "G*M*SE----****X", new DescData("Earthwork, Small Trench Or Fortification", "G*M*S-----****X") },
            { "G*M*SF----****X", new DescData("Fort", "G*M*S-----****X") },
            { "G*M*SL----****X", new DescData("Fortified Line", "G*M*S-----****X") },
            { "G*M*SW----****X", new DescData("Foxhole, Emplacement Or Weapon Site", "G*M*S-----****X") },
            { "G*M*SP----****X", new DescData("Strong Point", "G*M*S-----****X") },
            { "G*M*SS----****X", new DescData("Surface Shelter", "G*M*S-----****X") },
            { "G*M*SU----****X", new DescData("Underground Shelter", "G*M*S-----****X") },
            { "G*M*N-----****X", new DescData("Chemical, Biological, Radiological, And Nuclear", "G*M*------****X") },
            { "G*M*NM----****X", new DescData("Minimum Safe Distance Zones", "G*M*N-----****X") },
            { "G*M*NZ----****X", new DescData("Nuclear Detonations Ground Zero", "G*M*N-----****X") },
            { "G*M*NF----****X", new DescData("Fallout Producing", "G*M*N-----****X") },
            { "G*M*NR----****X", new DescData("Radioactive Area", "G*M*N-----****X") },
            { "G*M*NB----****X", new DescData("Biologically Contaminated Area", "G*M*N-----****X") },
            { "G*M*NC----****X", new DescData("Chemically Contaminated Area", "G*M*N-----****X") },
            { "G*M*NE----****X", new DescData("Release Events", "G*M*N-----****X") },
            { "G*M*NEB---****X", new DescData("Biological", "G*M*NE----****X") },
            { "G*M*NEC---****X", new DescData("Chemical", "G*M*NE----****X") },
            { "G*M*ND----****X", new DescData("Decontamination (decon) Points", "G*M*N-----****X") },
            { "G*M*NDP---****X", new DescData("Decon Site/point (unspecified)", "G*M*ND----****X") },
            { "G*M*NDA---****X", new DescData("Alternate Decon Site/point (unspecified)", "G*M*ND----****X") },
            { "G*M*NDT---****X", new DescData("Decon Site/point (troops)", "G*M*ND----****X") },
            { "G*M*NDE---****X", new DescData("Decon Site/point (equipment)", "G*M*ND----****X") },
            { "G*M*NDB---****X", new DescData("Decon Site/point (equipment And Troops)", "G*M*ND----****X") },
            { "G*M*NDO---****X", new DescData("Decon Site/point (operational Decontamination)", "G*M*ND----****X") },
            { "G*M*NDD---****X", new DescData("Decon Site/point (thorough Decontamination)", "G*M*ND----****X") },
            { "G*M*NL----****X", new DescData("Dose Rate Contour Lines", "G*M*N-----****X") },
            { "G*F*------****X", new DescData("Fire Support", "G*------------X") },
            { "G*F*P-----****X", new DescData("Point", "G*F*------****X") },
            { "G*F*PT----****X", new DescData("Target", "G*F*P-----****X") },
            { "G*F*PTS---****X", new DescData("Point/single Target", "G*F*PT----****X") },
            { "G*F*PTN---****X", new DescData("Nuclear Target", "G*F*PT----****X") },
            { "G*F*PC----****X", new DescData("Command & Control Points", "G*F*P-----****X") },
            { "G*F*PCF---****X", new DescData("Fire Support Station", "G*F*PC----****X") },
            { "G*F*PCS---****X", new DescData("Survey Control Point", "G*F*PC----****X") },
            { "G*F*PCB---****X", new DescData("Firing Point", "G*F*PC----****X") },
            { "G*F*PCR---****X", new DescData("Reload Point", "G*F*PC----****X") },
            { "G*F*PCH---****X", new DescData("Hide Point", "G*F*PC----****X") },
            { "G*F*PCL---****X", new DescData("Launch Point", "G*F*PC----****X") },
            { "G*F*L-----****X", new DescData("Lines", "G*F*------****X") },
            { "G*F*LT----****X", new DescData("Linear Target", "G*F*L-----****X") },
            { "G*F*LTS---****X", new DescData("Linear Smoke Target", "G*F*LT----****X") },
            { "G*F*LTF---****X", new DescData("Final Protective Fire (fpf)", "G*F*LT----****X") },
            { "G*F*LC----****X", new DescData("Command & Control Lines", "G*F*L-----****X") },
            { "G*F*LCF---****X", new DescData("Fire Support Coordination Line (fscl)", "G*F*LC----****X") },
            { "G*F*LCC---****X", new DescData("Coordinated Fire Line (cfl)", "G*F*LC----****X") },
            { "G*F*LCN---****X", new DescData("No-fire Line (nfl)", "G*F*LC----****X") },
            { "G*F*LCR---****X", new DescData("Restrictive Fire Line (rfl)", "G*F*LC----****X") },
            { "G*F*LCM---****X", new DescData("Munition Flight Path (mfp)", "G*F*LC----****X") },
            { "G*F*A-----****X", new DescData("Areas", "G*F*------****X") },
            { "G*F*AT----****X", new DescData("Area Target", "G*F*A-----****X") },
            { "G*F*ATR---****X", new DescData("Rectangular Target", "G*F*AT----****X") },
            { "G*F*ATC---****X", new DescData("Circular Target", "G*F*AT----****X") },
            { "G*F*ATG---****X", new DescData("Series Or Group Of Targets", "G*F*AT----****X") },
            { "G*F*ATS---****X", new DescData("Smoke", "G*F*AT----****X") },
            { "G*F*ATB---****X", new DescData("Bomb Area", "G*F*AT----****X") },
            { "G*F*AC----****X", new DescData("Command & Control Areas", "G*F*A-----****X") },
            { "G*F*ACS---****X", new DescData("Fire Support Area (fsa)", "G*F*AC----****X") },
            { "G*F*ACSI--****X", new DescData("Fire Support Area (fsa), Irregular", "G*F*ACS---****X") },
            { "G*F*ACSR--****X", new DescData("Fire Support Area (fsa), Rectangular", "G*F*ACS---****X") },
            { "G*F*ACSC--****X", new DescData("Fire Support Area (fsa), Circular", "G*F*ACS---****X") },
            { "G*F*ACA---****X", new DescData("Airspace Coordination Area (aca)", "G*F*AC----****X") },
            { "G*F*ACAI--****X", new DescData("Airspace Coordination Area (aca), Irregular", "G*F*ACA---****X") },
            { "G*F*ACAR--****X", new DescData("Airspace Coordination Area (aca), Rectangular", "G*F*ACA---****X") },
            { "G*F*ACAC--****X", new DescData("Airspace Coordination Area (aca), Circular", "G*F*ACA---****X") },
            { "G*F*ACF---****X", new DescData("Free Fire Area (ffa)", "G*F*AC----****X") },
            { "G*F*ACFI--****X", new DescData("Free Fire Area (ffa), Irregular", "G*F*ACF---****X") },
            { "G*F*ACFR--****X", new DescData("Free Fire Area (ffa), Rectangular", "G*F*ACF---****X") },
            { "G*F*ACFC--****X", new DescData("Free Fire Area (ffa), Circular", "G*F*ACF---****X") },
            { "G*F*ACN---****X", new DescData("No-fire Area (nfa)", "G*F*AC----****X") },
            { "G*F*ACNI--****X", new DescData("No Fire Area (nfa), Irregular", "G*F*ACN---****X") },
            { "G*F*ACNR--****X", new DescData("No Fire Area (nfa), Rectangular", "G*F*ACN---****X") },
            { "G*F*ACNC--****X", new DescData("No Fire Area (nfa), Circular", "G*F*ACN---****X") },
            { "G*F*ACR---****X", new DescData("Restrictive Fire Area (rfa)", "G*F*AC----****X") },
            { "G*F*ACRI--****X", new DescData("Restrictive Fire Area (rfa), Irregular", "G*F*ACR---****X") },
            { "G*F*ACRR--****X", new DescData("Restrictive Fire Area (rfa), Rectangular", "G*F*ACR---****X") },
            { "G*F*ACRC--****X", new DescData("Restrictive Fire Area (rfa), Circular", "G*F*ACR---****X") },
            { "G*F*ACP---****X", new DescData("Position Area For Artillery (paa)", "G*F*AC----****X") },
            { "G*F*ACPR--****X", new DescData("Position Area For Artillery (paa), Rectangular", "G*F*ACP---****X") },
            { "G*F*ACPC--****X", new DescData("Position Area For Artillery (paa), Circular", "G*F*ACP---****X") },
            { "G*F*ACE---****X", new DescData("Sensor Zone", "G*F*AC----****X") },
            { "G*F*ACEI--****X", new DescData("Sensor Zone, Irregular", "G*F*ACE---****X") },
            { "G*F*ACER--****X", new DescData("Sensor Zone, Rectangular", "G*F*ACE---****X") },
            { "G*F*ACEC--****X", new DescData("Sensor Zone, Circular", "G*F*ACE---****X") },
            { "G*F*ACD---****X", new DescData("Dead Space Area (da)", "G*F*AC----****X") },
            { "G*F*ACDI--****X", new DescData("Dead Space Area (da), Irregular", "G*F*ACD---****X") },
            { "G*F*ACDR--****X", new DescData("Dead Space Area (da), Rectangular", "G*F*ACD---****X") },
            { "G*F*ACDC--****X", new DescData("Dead Space Area (da), Circular", "G*F*ACD---****X") },
            { "G*F*ACZ---****X", new DescData("Zone Of Responsibility (zor)", "G*F*AC----****X") },
            { "G*F*ACZI--****X", new DescData("Zone Of Responsibility (zor), Irregular", "G*F*ACZ---****X") },
            { "G*F*ACZR--****X", new DescData("Zone Of Responsibility (zor), Rectangular", "G*F*ACZ---****X") },
            { "G*F*ACZC--****X", new DescData("Zone Of Responsibility (zor), Circular", "G*F*ACZ---****X") },
            { "G*F*ACB---****X", new DescData("Target Build-up Area (tba)", "G*F*AC----****X") },
            { "G*F*ACBI--****X", new DescData("Target Build Up Area (tba), Irregular", "G*F*ACB---****X") },
            { "G*F*ACBR--****X", new DescData("Target Build Up Area (tba), Rectangular", "G*F*ACB---****X") },
            { "G*F*ACBC--****X", new DescData("Target Build Up Area (tba), Circular", "G*F*ACB---****X") },
            { "G*F*ACV---****X", new DescData("Target Value Area (tvar)", "G*F*AC----****X") },
            { "G*F*ACVI--****X", new DescData("Target Value Area (tvar), Irregular", "G*F*ACV---****X") },
            { "G*F*ACVR--****X", new DescData("Target Value Area (tvar), Rectangular", "G*F*ACV---****X") },
            { "G*F*ACVC--****X", new DescData("Target Value Area (tvar), Circular", "G*F*ACV---****X") },
            { "G*F*ACT---****X", new DescData("Terminally Guided Munition Footprint (tgmf)", "G*F*AC----****X") },
            { "G*F*AZ----****X", new DescData("Target Acquisition Zones", "G*F*A-----****X") },
            { "G*F*AZI---****X", new DescData("Artillery Target Intelligence (ati) Zone", "G*F*AZ----****X") },
            { "G*F*AZII--****X", new DescData("Artillery Target Intelligence (ati) Zone, Irregular", "G*F*AZI---****X") },
            { "G*F*AZIR--****X", new DescData("Artillery Target Intelligence (ati) Zone, Rectangular", "G*F*AZI---****X") },
            { "G*F*AZX---****X", new DescData("Call For Fire Zone (cffz)", "G*F*AZ----****X") },
            { "G*F*AZXI--****X", new DescData("Call For Fire Zone (cffz), Irregular", "G*F*AZX---****X") },
            { "G*F*AZXR--****X", new DescData("Call For Fire Zone (cffz), Rectangular", "G*F*AZX---****X") },
            { "G*F*AZC---****X", new DescData("Censor Zone", "G*F*AZ----****X") },
            { "G*F*AZCI--****X", new DescData("Censor Zone, Irregular", "G*F*AZC---****X") },
            { "G*F*AZCR--****X", new DescData("Censor Zone, Rectangular", "G*F*AZC---****X") },
            { "G*F*AZF---****X", new DescData("Critical Friendly Zone (cfz)", "G*F*AZ----****X") },
            { "G*F*AZFI--****X", new DescData("Critical Friendly Zone (cfz), Irregular", "G*F*AZF---****X") },
            { "G*F*AZFR--****X", new DescData("Critical Friendly Zone (cfz), Rectangular", "G*F*AZF---****X") },
            { "G*F*AX----****X", new DescData("Weapon/sensor Range Fans", "G*F*A-----****X") },
            { "G*F*AXC---****X", new DescData("Weapon/sensor Range Fan, Circular", "G*F*AX----****X") },
            { "G*F*AXS---****X", new DescData("Weapon/sensor Range Fan, Sector", "G*F*AX----****X") },
            { "G*F*AK----****X", new DescData("Kill Box", "G*F*A-----****X") },
            { "G*F*AKB---****X", new DescData("Blue Kill Box (bkb)", "G*F*AK----****X") },
            { "G*F*AKBC--****X", new DescData("Blue Kill Box, Circular", "G*F*AKB---****X") },
            { "G*F*AKBI--****X", new DescData("Blue Kill Box, Irregular", "G*F*AKB---****X") },
            { "G*F*AKBR--****X", new DescData("Blue Kill Box, Rectangular", "G*F*AKB---****X") },
            { "G*F*AKP---****X", new DescData("Purple Kill Box (pkb)", "G*F*AK----****X") },
            { "G*F*AKPC--****X", new DescData("Purple Kill Box, Circular", "G*F*AKP---****X") },
            { "G*F*AKPI--****X", new DescData("Purple Kill Box, Irregular", "G*F*AKP---****X") },
            { "G*F*AKPR--****X", new DescData("Purple Kill Box, Rectangular", "G*F*AKP---****X") },
            { "G*S*------****X", new DescData("Combat Service Support", "G*------------X") },
            { "G*S*P-----****X", new DescData("Points", "G*S*------****X") },
            { "G*S*PX----****X", new DescData("Ambulance Exchange Point", "G*S*P-----****X") },
            { "G*S*PC----****X", new DescData("Cannibalization Point", "G*S*P-----****X") },
            { "G*S*PY----****X", new DescData("Casualty Collection Point", "G*S*P-----****X") },
            { "G*S*PT----****X", new DescData("Civilian Collection Point", "G*S*P-----****X") },
            { "G*S*PD----****X", new DescData("Detainee Collection Point", "G*S*P-----****X") },
            { "G*S*PE----****X", new DescData("Enemy Prisoner Of War (epw) Collection Point", "G*S*P-----****X") },
            { "G*S*PL----****X", new DescData("Logistics Release Point (lrp)", "G*S*P-----****X") },
            { "G*S*PM----****X", new DescData("Maintenance Collection Point", "G*S*P-----****X") },
            { "G*S*PR----****X", new DescData("Rearm, Refuel And Resupply Point", "G*S*P-----****X") },
            { "G*S*PU----****X", new DescData("Refuel On The Move (rom) Point", "G*S*P-----****X") },
            { "G*S*PO----****X", new DescData("Traffic Control Post (tcp)", "G*S*P-----****X") },
            { "G*S*PI----****X", new DescData("Trailer Transfer Point", "G*S*P-----****X") },
            { "G*S*PN----****X", new DescData("Unit Maintenance Collection Point", "G*S*P-----****X") },
            { "G*S*PS----****X", new DescData("Supply Points", "G*S*P-----****X") },
            { "G*S*PSZ---****X", new DescData("General", "G*S*PS----****X") },
            { "G*S*PSA---****X", new DescData("Class I", "G*S*PS----****X") },
            { "G*S*PSB---****X", new DescData("Class Ii", "G*S*PS----****X") },
            { "G*S*PSC---****X", new DescData("Class Iii", "G*S*PS----****X") },
            { "G*S*PSD---****X", new DescData("Class Iv", "G*S*PS----****X") },
            { "G*S*PSE---****X", new DescData("Class V", "G*S*PS----****X") },
            { "G*S*PSF---****X", new DescData("Class Vi", "G*S*PS----****X") },
            { "G*S*PSG---****X", new DescData("Class Vii", "G*S*PS----****X") },
            { "G*S*PSH---****X", new DescData("Class Viii", "G*S*PS----****X") },
            { "G*S*PSI---****X", new DescData("Class Ix", "G*S*PS----****X") },
            { "G*S*PSJ---****X", new DescData("Class X", "G*S*PS----****X") },
            { "G*S*PA----****X", new DescData("Ammunition Points", "G*S*P-----****X") },
            { "G*S*PAS---****X", new DescData("Ammunition Supply Point (asp)", "G*S*PA----****X") },
            { "G*S*PAT---****X", new DescData("Ammunition Transfer Point (atp)", "G*S*PA----****X") },
            { "G*S*L-----****X", new DescData("Lines", "G*S*------****X") },
            { "G*S*LC----****X", new DescData("Convoys", "G*S*L-----****X") },
            { "G*S*LCM---****X", new DescData("Moving Convoy", "G*S*LC----****X") },
            { "G*S*LCH---****X", new DescData("Halted Convoy", "G*S*LC----****X") },
            { "G*S*LR----****X", new DescData("Supply Routes", "G*S*L-----****X") },
            { "G*S*LRM---****X", new DescData("Main Supply Route", "G*S*LR----****X") },
            { "G*S*LRA---****X", new DescData("Alternate Supply Route", "G*S*LR----****X") },
            { "G*S*LRO---****X", new DescData("One-way Traffic", "G*S*LR----****X") },
            { "G*S*LRT---****X", new DescData("Alternating Traffic", "G*S*LR----****X") },
            { "G*S*LRW---****X", new DescData("Two-way Traffic", "G*S*LR----****X") },
            { "G*S*A-----****X", new DescData("Area", "G*S*------****X") },
            { "G*S*AD----****X", new DescData("Detainee Holding Area", "G*S*A-----****X") },
            { "G*S*AE----****X", new DescData("Enemy Prisoner Of War (epw) Holding Area", "G*S*A-----****X") },
            { "G*S*AR----****X", new DescData("Forward Arming And Refueling Area (farp)", "G*S*A-----****X") },
            { "G*S*AH----****X", new DescData("Refugee Holding Area", "G*S*A-----****X") },
            { "G*S*AS----****X", new DescData("Support Areas", "G*S*A-----****X") },
            { "G*S*ASB---****X", new DescData("Brigade (bsa)", "G*S*AS----****X") },
            { "G*S*ASD---****X", new DescData("Division (dsa)", "G*S*AS----****X") },
            { "G*S*ASR---****X", new DescData("Regimental (rsa)", "G*S*AS----****X") },
            { "G*O*------****X", new DescData("Other", "G*------------X") },
            { "G*O*E-----****X", new DescData("Emergency", "G*O*------****X") },
            { "G*O*ED----****X", new DescData("Ditched Aircraft", "G*O*E-----****X") },
            { "G*O*EP----****X", new DescData("Person In Water", "G*O*E-----****X") },
            { "G*O*EV----****X", new DescData("Distressed Vessel", "G*O*E-----****X") },
            { "G*O*H-----****X", new DescData("Hazard", "G*O*------****X") },
            { "G*O*HM----****X", new DescData("Sea Mine-like", "G*O*H-----****X") },
            { "G*O*HN----****X", new DescData("Navigational", "G*O*H-----****X") },
            { "G*O*HI----****X", new DescData("Iceberg", "G*O*H-----****X") },
            { "G*O*HO----****X", new DescData("Oil Rig", "G*O*H-----****X") },
            { "G*O*S-----****X", new DescData("Sea Subsurface Returns", "G*O*------****X") },
            { "G*O*SB----****X", new DescData("Bottom Return/non-milco", "G*O*S-----****X") },
            { "G*O*SBM---****X", new DescData("Installation/manmade", "G*O*SB----****X") },
            { "G*O*SBN---****X", new DescData("Seabed Rock/stone, Obstacle, Other", "G*O*SB----****X") },
            { "G*O*SBW---****X", new DescData("Wreck, Non Dangerous", "G*O*SB----****X") },
            { "G*O*SBX---****X", new DescData("Wreck, Dangerous", "G*O*SB----****X") },
            { "G*O*SM----****X", new DescData("Marine Life", "G*O*S-----****X") },
            { "G*O*SS----****X", new DescData("Sea Anomaly (wake, Current, Knuckle)", "G*O*S-----****X") },
            { "G*O*B-----****X", new DescData("Bearing Line", "G*O*------****X") },
            { "G*O*BE----****X", new DescData("Electronic", "G*O*B-----****X") },
            { "G*O*BA----****X", new DescData("Acoustic", "G*O*B-----****X") },
            { "G*O*BT----****X", new DescData("Torpedo", "G*O*B-----****X") },
            { "G*O*BO----****X", new DescData("Electro-optical Intercept", "G*O*B-----****X") },
            { "G*O*F-----****X", new DescData("Fix", "G*O*------****X") },
            { "G*O*FA----****X", new DescData("Acoustic", "G*O*F-----****X") },
            { "G*O*FE----****X", new DescData("Electro-magnetic", "G*O*F-----****X") },
            { "G*O*FO----****X", new DescData("Electro-optical", "G*O*F-----****X") }
        };

        /// <summary>
        /// A dictionary of all the templates in Appendix C.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryC = new Dictionary<string, DescData>
        {
            { "W--------------", new DescData("Metoc", null) },
            { "WA-------------", new DescData("Atmospheric", "W--------------") },
            { "WA--P----------", new DescData("Pressure Systems", "WA-------------") },
            { "WAS-PL----P----", new DescData("Low Pressure Center", "WA--P----------") },
            { "WAS-PC----P----", new DescData("Cyclone Center", "WAS-PL----P----") },
            { "WAS-PLT---P----", new DescData("Tropopause Low", "WAS-PL----P----") },
            { "WAS-PH----P----", new DescData("High Pressure Center", "WA--P----------") },
            { "WAS-PA----P----", new DescData("Anticyclone Center", "WAS-PH----P----") },
            { "WAS-PHT---P----", new DescData("Tropopause High", "WAS-PH----P----") },
            { "WA-DPF-----L---", new DescData("Frontal Systems", "WA--P----------") },
            { "WA-DPFC----L---", new DescData("Cold Front", "WA-DPF-----L---") },
            { "WA-DPFCU---L---", new DescData("Upper Cold Front", "WA-DPFC----L---") },
            { "WA-DPFC-FG-L---", new DescData("Cold Frontogenesis", "WA-DPFC----L---") },
            { "WA-DPFC-FY-L---", new DescData("Cold Frontolysis", "WA-DPFC----L---") },
            { "WA-DPFW----L---", new DescData("Warm Front", "WA-DPF-----L---") },
            { "WA-DPFWU---L---", new DescData("Upper Warm Front", "WA-DPFW----L---") },
            { "WA-DPFW-FG-L---", new DescData("Warm Frontogenesis", "WA-DPFW----L---") },
            { "WA-DPFW-FY-L---", new DescData("Warm Frontolysis", "WA-DPFW----L---") },
            { "WA-DPFO----L---", new DescData("Occluded Front", "WA-DPF-----L---") },
            { "WA-DPFOU---L---", new DescData("Upper Occluded Front", "WA-DPFO----L---") },
            { "WA-DPFO-FY-L---", new DescData("Occluded Frontolysis", "WA-DPFO----L---") },
            { "WA-DPFS----L---", new DescData("Stationary Front", "WA-DPF-----L---") },
            { "WA-DPFSU---L---", new DescData("Upper Stationary Front", "WA-DPFS----L---") },
            { "WA-DPFS-FG-L---", new DescData("Stationary Frontogenesis", "WA-DPFS----L---") },
            { "WA-DPFS-FY-L---", new DescData("Stationary Frontolysis", "WA-DPFS----L---") },
            { "WA--PX---------", new DescData("Lines", "WA--P----------") },
            { "WA-DPXT----L---", new DescData("Trough Axis", "WA--PX---------") },
            { "WA-DPXR----L---", new DescData("Ridge Axis", "WA--PX---------") },
            { "WA-DPXSQ---L---", new DescData("Severe Squall Line", "WA--PX---------") },
            { "WA-DPXIL---L---", new DescData("Instability Line", "WA--PX---------") },
            { "WA-DPXSH---L---", new DescData("Shear Line", "WA--PX---------") },
            { "WA-DPXITCZ-L---", new DescData("Inter-tropical Convergance Zone", "WA--PX---------") },
            { "WA-DPXCV---L---", new DescData("Convergance Line", "WA--PX---------") },
            { "WA-DPXITD--L---", new DescData("Inter-tropical Discontinuity", "WA--PX---------") },
            { "WA--T----------", new DescData("Turbulence", "WA-------------") },
            { "WAS-TL----P----", new DescData("Turbulence - Light", "WA--T----------") },
            { "WAS-TM----P----", new DescData("Turbulence - Moderate", "WA--T----------") },
            { "WAS-TS----P----", new DescData("Turbulence - Severe", "WA--T----------") },
            { "WAS-TE----P----", new DescData("Turbulence - Extreme", "WA--T----------") },
            { "WAS-T-MW--P----", new DescData("Mountain Waves", "WA--T----------") },
            { "WA--I----------", new DescData("Icing", "WA-------------") },
            { "WAS-IC----P----", new DescData("Clear Icing", "WA--I----------") },
            { "WAS-ICL---P----", new DescData("Clear Icing - Light", "WAS-IC----P----") },
            { "WAS-ICM---P----", new DescData("Clear Icing - Moderate", "WAS-IC----P----") },
            { "WAS-ICS---P----", new DescData("Clear Icing - Severe", "WAS-IC----P----") },
            { "WAS-IR----P----", new DescData("Rime Icing", "WA--I----------") },
            { "WAS-IRL---P----", new DescData("Rime Icing - Light", "WAS-IR----P----") },
            { "WAS-IRM---P----", new DescData("Rime Icing - Moderate", "WAS-IR----P----") },
            { "WAS-IRS---P----", new DescData("Rime Icing - Severe", "WAS-IR----P----") },
            { "WAS-IM----P----", new DescData("Mixed Icing", "WA--I----------") },
            { "WAS-IML---P----", new DescData("Mixed Icing - Light", "WAS-IM----P----") },
            { "WAS-IMM---P----", new DescData("Mixed Icing - Moderate", "WAS-IM----P----") },
            { "WAS-IMS---P----", new DescData("Mixed Icing - Severe", "WAS-IM----P----") },
            { "WA--W----------", new DescData("Winds", "WA-------------") },
            { "WAS-WC----P----", new DescData("Calm Winds", "WA--W----------") },
            { "WAS-WP----P----", new DescData("Wind Plot", "WA--W----------") },
            { "WA-DWJ-----L---", new DescData("Jet Stream", "WA--W----------") },
            { "WA-DWS-----L---", new DescData("Stream Line", "WA--W----------") },
            { "WA--CC---------", new DescData("Cloud Coverage", "WA-------------") },
            { "WA--CCCS-------", new DescData("Cloud Coverage Symbols", "WA--CC---------") },
            { "WAS-CCCSCSP----", new DescData("Clear Sky", "WA--CCCS-------") },
            { "WAS-CCCSFCP----", new DescData("Few Coverage", "WA--CCCS-------") },
            { "WAS-CCCSSCP----", new DescData("Scattered Coverage", "WA--CCCS-------") },
            { "WAS-CCCSBCP----", new DescData("Broken Coverage", "WA--CCCS-------") },
            { "WAS-CCCSOCP----", new DescData("Overcast Coverage", "WA--CCCS-------") },
            { "WAS-CCCSOBP----", new DescData("Sky Totally Or Partially Obscured", "WA--CCCS-------") },
            { "WA--WS---------", new DescData("Weather Symbols", "WA-------------") },
            { "WAS-WSR--------", new DescData("Rain", "WA--WS---------") },
            { "WAS-WSR-LIP----", new DescData("Rain - Intermittent Light", "WAS-WSR--------") },
            { "WAS-WSR-LCP----", new DescData("Rain - Continuous Light", "WAS-WSR-LIP----") },
            { "WAS-WSR-MIP----", new DescData("Rain - Intermittent Moderate", "WAS-WSR--------") },
            { "WAS-WSR-MCP----", new DescData("Rain - Continuous Moderate", "WAS-WSR-MIP----") },
            { "WAS-WSR-HIP----", new DescData("Rain - Intermittent Heavy", "WAS-WSR--------") },
            { "WAS-WSR-HCP----", new DescData("Rain - Continuous Heavy", "WAS-WSR-HIP----") },
            { "WAS-WSRF-------", new DescData("Freezing Rain", "WA--WS---------") },
            { "WAS-WSRFL-P----", new DescData("Freezing Rain - Light", "WAS-WSRF-------") },
            { "WAS-WSRFMHP----", new DescData("Freezing Rain - Moderate/heavy", "WAS-WSRF-------") },
            { "WAS-WSRS-------", new DescData("Rain Showers", "WA--WS---------") },
            { "WAS-WSRSL-P----", new DescData("Rain Showers - Light", "WAS-WSRS-------") },
            { "WAS-WSRSMHP----", new DescData("Rain Showers - Moderate/heavy", "WAS-WSRS-------") },
            { "WAS-WSRST-P----", new DescData("Rain Showers - Torrential", "WAS-WSRS-------") },
            { "WAS-WSDZ-------", new DescData("Drizzle", "WA--WS---------") },
            { "WAS-WSD-LIP----", new DescData("Drizzle - Intermittent Light", "WAS-WSDZ-------") },
            { "WAS-WSD-LCP----", new DescData("Drizzle - Continuous Light", "WAS-WSD-LIP----") },
            { "WAS-WSD-MIP----", new DescData("Drizzle - Intermittent Moderate", "WAS-WSDZ-------") },
            { "WAS-WSD-MCP----", new DescData("Drizzle - Continuous Moderate", "WAS-WSD-MIP----") },
            { "WAS-WSD-HIP----", new DescData("Drizzle - Intermittent Heavy", "WAS-WSDZ-------") },
            { "WAS-WSD-HCP----", new DescData("Drizzle - Continuous Heavy", "WAS-WSD-HIP----") },
            { "WAS-WSDF-------", new DescData("Freezing Drizzle", "WA--WS---------") },
            { "WAS-WSDFL-P----", new DescData("Freezing Drizzle - Light", "WAS-WSDF-------") },
            { "WAS-WSDFMHP----", new DescData("Freezing Drizzle - Moderate/heavy", "WAS-WSDF-------") },
            { "WAS-WSM--------", new DescData("Rain And Snow Mixed", "WA--WS---------") },
            { "WAS-WSM-L-P----", new DescData("Rain Or Drizzle And Snow - Light", "WAS-WSM--------") },
            { "WAS-WSM-MHP----", new DescData("Rain Or Drizzle And Snow - Moderate/heavy", "WAS-WSM--------") },
            { "WAS-WSMSL-P----", new DescData("Rain And Snow Showers - Light", "WAS-WSM--------") },
            { "WAS-WSMSMHP----", new DescData("Rain And Snow Showers - Moderate/heavy", "WAS-WSM--------") },
            { "WAS-WSS--------", new DescData("Snow", "WA--WS---------") },
            { "WAS-WSS-LIP----", new DescData("Snow - Intermittent Light", "WAS-WSS--------") },
            { "WAS-WSS-LCP----", new DescData("Snow - Continuous Light", "WAS-WSS-LIP----") },
            { "WAS-WSS-MIP----", new DescData("Snow - Intermittent Moderate", "WAS-WSS--------") },
            { "WAS-WSS-MCP----", new DescData("Snow - Continuous Moderate", "WAS-WSS-MIP----") },
            { "WAS-WSS-HIP----", new DescData("Snow - Intermittent Heavy", "WAS-WSS--------") },
            { "WAS-WSS-HCP----", new DescData("Snow - Continuous Heavy", "WAS-WSS-HIP----") },
            { "WAS-WSSBLMP----", new DescData("Blowing Snow - Light/moderate", "WAS-WSS--------") },
            { "WAS-WSSBH-P----", new DescData("Blowing Snow - Heavy", "WAS-WSS--------") },
            { "WAS-WSSG--P----", new DescData("Snow Grains", "WA--WS---------") },
            { "WAS-WSSS-------", new DescData("Snow Showers", "WA--WS---------") },
            { "WAS-WSSSL-P----", new DescData("Snow Showers - Light", "WAS-WSSS-------") },
            { "WAS-WSSSMHP----", new DescData("Snow Showers - Moderate/heavy", "WAS-WSSS-------") },
            { "WAS-WSGR-------", new DescData("Hail", "WA--WS---------") },
            { "WAS-WSGRL-P----", new DescData("Hail - Light Not Associated With Thunder", "WAS-WSGR-------") },
            { "WAS-WSGRMHP----", new DescData("Hail - Moderate/heavy Not Associated With Thunder", "WAS-WSGR-------") },
            { "WAS-WSIC--P----", new DescData("Ice Crystals (diamond Dust)", "WA--WS---------") },
            { "WAS-WSPL-------", new DescData("Ice Pellets (sleet)", "WA--WS---------") },
            { "WAS-WSPLL-P----", new DescData("Ice Pellets - Light", "WAS-WSPL-------") },
            { "WAS-WSPLM-P----", new DescData("Ice Pellets - Moderate", "WAS-WSPL-------") },
            { "WAS-WSPLH-P----", new DescData("Ice Pellets - Heavy", "WAS-WSPL-------") },
            { "WAS-WST--------", new DescData("Storms", "WA--WS---------") },
            { "WAS-WST-NPP----", new DescData("Thunderstorm - No Precipitation", "WAS-WST--------") },
            { "WAS-WSTMR-P----", new DescData("Thunderstorm Light To Moderate With Rain/snow - No Hail", "WAS-WST--------") },
            { "WAS-WSTHR-P----", new DescData("Thunderstorm Heavy With Rain/snow - No Hail", "WAS-WST--------") },
            { "WAS-WSTMH-P----", new DescData("Thunderstorm Light To Moderate - With Hail", "WAS-WST--------") },
            { "WAS-WSTHH-P----", new DescData("Thunderstorm Heavy - With Hail", "WAS-WST--------") },
            { "WAS-WST-FCP----", new DescData("Funnel Cloud (tornado/waterspout)", "WAS-WST--------") },
            { "WAS-WST-SQP----", new DescData("Squall", "WAS-WST--------") },
            { "WAS-WST-LGP----", new DescData("Lightning", "WAS-WST--------") },
            { "WAS-WSFG-------", new DescData("Fog", "WA--WS---------") },
            { "WAS-WSFGPSP----", new DescData("Fog - Shallow Patches", "WAS-WSFG-------") },
            { "WAS-WSFGCSP----", new DescData("Fog - Shallow Continuous", "WAS-WSFG-------") },
            { "WAS-WSFGP-P----", new DescData("Fog - Patchy", "WAS-WSFG-------") },
            { "WAS-WSFGSVP----", new DescData("Fog - Sky Visible", "WAS-WSFG-------") },
            { "WAS-WSFGSOP----", new DescData("Fog - Sky Obscured", "WAS-WSFG-------") },
            { "WAS-WSFGFVP----", new DescData("Fog - Freezing, Sky Visible", "WAS-WSFG-------") },
            { "WAS-WSFGFOP----", new DescData("Fog - Freezing, Sky Not Visible", "WAS-WSFG-------") },
            { "WAS-WSBR--P----", new DescData("Mist", "WA--WS---------") },
            { "WAS-WSFU--P----", new DescData("Smoke", "WA--WS---------") },
            { "WAS-WSHZ--P----", new DescData("Haze", "WA--WS---------") },
            { "WAS-WSD--------", new DescData("Dust Or Sand", "WA--WS---------") },
            { "WAS-WSDSLMP----", new DescData("Dust/sand Storm - Light To Moderate", "WAS-WSD--------") },
            { "WAS-WSDSS-P----", new DescData("Dust/sand Storm - Severe", "WAS-WSD--------") },
            { "WAS-WSDD--P----", new DescData("Dust Devil", "WAS-WSD--------") },
            { "WAS-WSDB--P----", new DescData("Blowing Dust Or Sand", "WAS-WSD--------") },
            { "WAS-WSTS-------", new DescData("Tropical Storm Systems", "WA--WS---------") },
            { "WAS-WSTSD-P----", new DescData("Tropical Depression", "WAS-WSTS-------") },
            { "WAS-WSTSS-P----", new DescData("Tropical Storm", "WAS-WSTS-------") },
            { "WAS-WSTSH-P----", new DescData("Hurricane/typhoon", "WAS-WSTS-------") },
            { "WA-DWSTSWA--A--", new DescData("Tropical Storm Wind Areas And Date/time Labels", "WAS-WSTS-------") },
            { "WAS-WSVE--P----", new DescData("Volcanic Eruption", "WA--WS---------") },
            { "WAS-WSVA--P----", new DescData("Volcanic Ash", "WAS-WSVE--P----") },
            { "WAS-WST-LVP----", new DescData("Tropopause Level", "WA--WS---------") },
            { "WAS-WSF-LVP----", new DescData("Freezing Level", "WA--WS---------") },
            { "WAS-WSUKP-P----", new DescData("Precipitation Of Unknown Type And Intensity", "WA--WS---------") },
            { "WA--BA---------", new DescData("Bounded Areas Of Weather", "WA-------------") },
            { "WA-DBAIF----A--", new DescData("Instrument Flight Rule (ifr)", "WA--BA---------") },
            { "WA-DBAMV----A--", new DescData("Marginal Visual Flight Rule (mvfr)", "WA--BA---------") },
            { "WA-DBATB----A--", new DescData("Turbulence", "WA--BA---------") },
            { "WA-DBAI-----A--", new DescData("Icing", "WA--BA---------") },
            { "WA-DBALPNC--A--", new DescData("Liquid Precipitation - Non-convective Continuous Or Intermittent", "WA--BA---------") },
            { "WA-DBALPC---A--", new DescData("Liquid Precipitation - Convective", "WA-DBALPNC--A--") },
            { "WA-DBAFP----A--", new DescData("Freezing/frozen Precipitation", "WA--BA---------") },
            { "WA-DBAT-----A--", new DescData("Thunderstorms", "WA--BA---------") },
            { "WA-DBAFG----A--", new DescData("Fog", "WA--BA---------") },
            { "WA-DBAD-----A--", new DescData("Dust Or Sand", "WA--BA---------") },
            { "WA-DBAFF----A--", new DescData("Operator-defined Freeform", "WA--BA---------") },
            { "WA--IP---------", new DescData("Isopleths", "WA-------------") },
            { "WA-DIPIB---L---", new DescData("Isobar - Surface", "WA--IP---------") },
            { "WA-DIPCO---L---", new DescData("Contour - Upper Air", "WA--IP---------") },
            { "WA-DIPIS---L---", new DescData("Isotherm", "WA--IP---------") },
            { "WA-DIPIT---L---", new DescData("Isotach", "WA--IP---------") },
            { "WA-DIPID---L---", new DescData("Isodrosotherm", "WA--IP---------") },
            { "WA-DIPTH---L---", new DescData("Thickness", "WA--IP---------") },
            { "WA-DIPFF---L---", new DescData("Operator-defined Freeform", "WA--IP---------") },
            { "WAS-G----------", new DescData("State Of The Ground", "WA-------------") },
            { "WAS-GN---------", new DescData("Without Snow Or Measurable Ice Cover", "WAS-G----------") },
            { "WAS-GND-NCP----", new DescData("Surface Dry Without Cracks Or Appreciable Dust Or Loose Sand", "WAS-GN---------") },
            { "WAS-GNM---P----", new DescData("Surface Moist", "WAS-GN---------") },
            { "WAS-GNW-SWP----", new DescData("Surface Wet, Standing Water In Small Or Large Pools", "WAS-GN---------") },
            { "WAS-GNFL--P----", new DescData("Surface Flooded", "WAS-GN---------") },
            { "WAS-GNFZ--P----", new DescData("Surface Frozen", "WAS-GN---------") },
            { "WAS-GNG-TIP----", new DescData("Glaze (thin Ice) On Ground", "WAS-GN---------") },
            { "WAS-GNLDN-P----", new DescData("Loose Dry Dust Or Sand Not Covering Ground Completely", "WAS-GN---------") },
            { "WAS-GNLDTCP----", new DescData("Thin Loose Dry Dust Or Sand Covering Ground Completely", "WAS-GN---------") },
            { "WAS-GNLDMCP----", new DescData("Moderate/thick Loose Dry Dust Or Sand Covering Ground Completely", "WAS-GN---------") },
            { "WAS-GNDEWCP----", new DescData("Extremely Dry With Cracks", "WAS-GN---------") },
            { "WAS-GS---------", new DescData("With Snow Or Measurable Ice Cover", "WAS-G----------") },
            { "WAS-GSI---P----", new DescData("Predominately Ice Covered", "WAS-GS---------") },
            { "WAS-GSSCL-P----", new DescData("Compact Or Wet Snow (with Or Without Ice) Covering Less Than One-half Of Ground", "WAS-GS---------") },
            { "WAS-GSSCH-P----", new DescData("Compact Or Wet Snow (with Or Without Ice) Covering At Least One-half Ground, But Ground Not Completely Covered", "WAS-GS---------") },
            { "WAS-GSSCCEP----", new DescData("Even Layer Of Compact Or Wet Snow Covering Ground Completely", "WAS-GS---------") },
            { "WAS-GSSCCUP----", new DescData("Uneven Layer Of Compact Or Wet Snow Covering Ground Completely", "WAS-GS---------") },
            { "WAS-GSSLL-P----", new DescData("Loose Dry Snow Covering Less Than One-half Of Ground", "WAS-GS---------") },
            { "WAS-GSSLH-P----", new DescData("Loose Dry Snow Covering At Least One-half Ground, But Ground Not Completely Covered", "WAS-GS---------") },
            { "WAS-GSSLCEP----", new DescData("Even Layer Of Loose Dry Snow Covering Ground Completely", "WAS-GS---------") },
            { "WAS-GSSLCUP----", new DescData("Uneven Layer Of Loose Dry Snow Covering Ground Completely", "WAS-GS---------") },
            { "WAS-GSSDC-P----", new DescData("Snow Covering Ground Completely; Deep Drifts", "WAS-GS---------") },
            { "WO-------------", new DescData("Oceanic", "W--------------") },
            { "WO--I----------", new DescData("Ice Systems", "WO-------------") },
            { "WOS-IB----P----", new DescData("Icebergs", "WO--I----------") },
            { "WOS-IBM---P----", new DescData("Many Icebergs", "WOS-IB----P----") },
            { "WOS-IBBS--P----", new DescData("Belts And Strips", "WOS-IB----P----") },
            { "WOS-IBG---P----", new DescData("Iceberg - General", "WOS-IB----P----") },
            { "WOS-IBMG--P----", new DescData("Many Icebergs - General", "WOS-IB----P----") },
            { "WOS-IBBB--P----", new DescData("Bergy Bit", "WOS-IB----P----") },
            { "WOS-IBBBM-P----", new DescData("Many Bergy Bits", "WOS-IB----P----") },
            { "WOS-IBGL--P----", new DescData("Growler", "WOS-IB----P----") },
            { "WOS-IBGLM-P----", new DescData("Many Growlers", "WOS-IB----P----") },
            { "WOS-IBF---P----", new DescData("Floeberg", "WOS-IB----P----") },
            { "WOS-IBII--P----", new DescData("Ice Island", "WOS-IB----P----") },
            { "WO--IC---------", new DescData("Ice Concentration", "WO--I----------") },
            { "WOS-ICWB--P----", new DescData("Bergy Water", "WO--IC---------") },
            { "WOS-ICWR--P----", new DescData("Water With Radar Targets", "WO--IC---------") },
            { "WOS-ICIF--P----", new DescData("Ice Free", "WO--IC---------") },
            { "WO--ID---------", new DescData("Dynamic Processes", "WO--I----------") },
            { "WOS-IDC---P----", new DescData("Convergence", "WO--ID---------") },
            { "WOS-IDD---P----", new DescData("Divergence", "WO--ID---------") },
            { "WOS-IDS---P----", new DescData("Shearing Or Shear Zone", "WO--ID---------") },
            { "WO-DIDID---L---", new DescData("Ice Drift (direction)", "WO--ID---------") },
            { "WOS-II----P----", new DescData("Sea Ice", "WO--I----------") },
            { "WOS-IITM--P----", new DescData("Ice Thickness (observed)", "WOS-II----P----") },
            { "WOS-IITE--P----", new DescData("Ice Thickness (estimated)", "WOS-II----P----") },
            { "WOS-IIP---P----", new DescData("Melt Puddles Or Flooded Ice", "WOS-II----P----") },
            { "WO--IL---------", new DescData("Limits", "WO--I----------") },
            { "WO-DILOV---L---", new DescData("Limit Of Visual Observation", "WO--IL---------") },
            { "WO-DILUC---L---", new DescData("Limit Of Undercast", "WO--IL---------") },
            { "WO-DILOR---L---", new DescData("Limit Of Radar Observation", "WO--IL---------") },
            { "WO-DILIEO--L---", new DescData("Observed Ice Edge Or Boundary", "WO--IL---------") },
            { "WO-DILIEE--L---", new DescData("Estimated Ice Edge Or Boundary", "WO--IL---------") },
            { "WO-DILIER--L---", new DescData("Ice Edge Or Boundary From Radar", "WO--IL---------") },
            { "WO--IO---------", new DescData("Openings In The Ice", "WO--I----------") },
            { "WO-DIOC----L---", new DescData("Cracks", "WO--IO---------") },
            { "WO-DIOCS---L---", new DescData("Cracks At A Specific Location", "WO--IO---------") },
            { "WO-DIOL----L---", new DescData("Lead", "WO--IO---------") },
            { "WO-DIOLF---L---", new DescData("Frozen Lead", "WO--IO---------") },
            { "WOS-ISC---P----", new DescData("Snow Cover", "WO--I----------") },
            { "WOS-ISS---P----", new DescData("Sastrugi (with Orientation)", "WOS-ISC---P----") },
            { "WO--IT---------", new DescData("Topographical Features", "WO--I----------") },
            { "WOS-ITRH--P----", new DescData("Ridges Or Hummocks", "WO--IT---------") },
            { "WOS-ITR---P----", new DescData("Rafting", "WO--IT---------") },
            { "WOS-ITBB--P----", new DescData("Jammed Brash Barrier", "WO--IT---------") },
            { "WO--H----------", new DescData("Hydrography", "WO-------------") },
            { "WO--HD---------", new DescData("Depth", "WO--H----------") },
            { "WOS-HDS---P----", new DescData("Soundings", "WO--HD---------") },
            { "WO-DHDDL---L---", new DescData("Depth Curve", "WO--HD---------") },
            { "WO-DHDDC---L---", new DescData("Depth Contour", "WO--HD---------") },
            { "WO-DHDDA----A--", new DescData("Depth Area", "WO--HD---------") },
            { "WO--HC---------", new DescData("Coastal Hydrography", "WO--H----------") },
            { "WO-DHCC----L---", new DescData("Coastline", "WO--HC---------") },
            { "WO-DHCI-----A--", new DescData("Island", "WO--HC---------") },
            { "WO-DHCB-----A--", new DescData("Beach", "WO--HC---------") },
            { "WO-DHCW-----A--", new DescData("Water", "WO--HC---------") },
            { "WO-DHCF--------", new DescData("Foreshore", "WO--HC---------") },
            { "WO-DHCF----L---", new DescData("Foreshore", "WO-DHCF--------") },
            { "WO-DHCF-----A--", new DescData("Foreshore", "WO-DHCF--------") },
            { "WO-DHP---------", new DescData("Ports And Harbors", "WO--H----------") },
            { "WOS-HPB--------", new DescData("Ports", "WO-DHP---------") },
            { "WOS-HPB-O-P----", new DescData("Berths (onshore)", "WOS-HPB--------") },
            { "WOS-HPB-A-P----", new DescData("Berths (anchor)", "WOS-HPB--------") },
            { "WOS-HPBA--P----", new DescData("Anchorage", "WOS-HPB--------") },
            { "WO-DHPBA---L---", new DescData("Anchorage", "WOS-HPB--------") },
            { "WO-DHPBA----A--", new DescData("Anchorage", "WOS-HPB--------") },
            { "WOS-HPCP--P----", new DescData("Call In Point", "WOS-HPB--------") },
            { "WO-DHPBP---L---", new DescData("Pier/wharf/quay", "WOS-HPB--------") },
            { "WO--HPF--------", new DescData("Fishing", "WO-DHP---------") },
            { "WOS-HPFH--P----", new DescData("Fishing Harbor", "WO--HPF--------") },
            { "WOS-HPFS--P----", new DescData("Fish Stakes/traps/weirs", "WO--HPF--------") },
            { "WOS-HPFS---L---", new DescData("Fish Stakes/traps/weirs", "WO--HPF--------") },
            { "WOS-HPFF----A--", new DescData("Fish Stakes/traps/weirs", "WO--HPF--------") },
            { "WO--HPM--------", new DescData("Facilities", "WO-DHP---------") },
            { "WO-DHPMD----A--", new DescData("Drydock", "WO--HPM--------") },
            { "WOS-HPML--P----", new DescData("Landing Place", "WO--HPM--------") },
            { "WO-DHPMO--P----", new DescData("Offshore Loading Facility", "WO--HPM--------") },
            { "WO-DHPMO---L---", new DescData("Offshore Loading Facility", "WO--HPM--------") },
            { "WO-DHPMO----A--", new DescData("Offshore Loading Facility", "WO--HPM--------") },
            { "WO-DHPMRA--L---", new DescData("Ramp (above Water)", "WO--HPM--------") },
            { "WO-DHPMRB--L---", new DescData("Ramp (below Water)", "WO--HPM--------") },
            { "WOS-HPM-R-P----", new DescData("Landing Ring", "WO--HPM--------") },
            { "WOS-HPM-FC-L---", new DescData("Ferry Crossing", "WO--HPM--------") },
            { "WOS-HPM-CC-L---", new DescData("Cable Ferry Crossing", "WO--HPM--------") },
            { "WOS-HPD---P----", new DescData("Dolphin", "WO--HPM--------") },
            { "WO--HPP--------", new DescData("Shoreline Protection", "WO-DHP---------") },
            { "WO-DHPSPA--L---", new DescData("Breakwater/groin/jetty (above Water)", "WO--HPP--------") },
            { "WO-DHPSPB--L---", new DescData("Breakwater/groin/jetty (below Water)", "WO--HPP--------") },
            { "WO-DHPSPS--L---", new DescData("Seawall", "WO--HPP--------") },
            { "WO--HA---------", new DescData("Aids To Navigation", "WO--H----------") },
            { "WOS-HABA--P----", new DescData("Beacon", "WO--HA---------") },
            { "WOS-HABB--P----", new DescData("Buoy Default", "WO--HA---------") },
            { "WOS-HABM--P----", new DescData("Marker", "WO--HA---------") },
            { "WOS-HABP-------", new DescData("Perches/stakes", "WO--HA---------") },
            { "WOS-HABP--P----", new DescData("Perches/stakes", "WOS-HABP-------") },
            { "WO-DHABP----A--", new DescData("Perches/stakes", "WOS-HABP-------") },
            { "WOS-HAL---P----", new DescData("Light", "WO--HA---------") },
            { "WO-DHALLA--L---", new DescData("Leading Line", "WO--HA---------") },
            { "WOS-HALV--P----", new DescData("Light Vessel/lightship", "WO--HA---------") },
            { "WOS-HALH--P----", new DescData("Lighthouse", "WO--HA---------") },
            { "WO--HH---------", new DescData("Dangers/hazards", "WO--H----------") },
            { "WOS-HHRS--P----", new DescData("Rock Submergered", "WO--HH---------") },
            { "WOS-HHRA--P----", new DescData("Rock Awashed", "WO--HH---------") },
            { "WO-DHHD-----A--", new DescData("Underwater Danger/hazard", "WO--HH---------") },
            { "WOS-HHDF-------", new DescData("Foul Ground", "WO--HH---------") },
            { "WOS-HHDF--P----", new DescData("Foul Ground", "WOS-HHDF-------") },
            { "WO-DHHDF----A--", new DescData("Foul Ground", "WOS-HHDF-------") },
            { "WO-DHHDK-------", new DescData("Kelp/seaweed", "WO--HH---------") },
            { "WO-DHHDK--P----", new DescData("Kelp/seaweed", "WO-DHHDK-------") },
            { "WO-DHHDK----A--", new DescData("Kelp/seaweed", "WO-DHHDK-------") },
            { "WOS-HHDMD------", new DescData("Mine-naval", "WO--HH---------") },
            { "WOS-HHDMDBP----", new DescData("Mine-naval (doubtful)", "WOS-HHDMD------") },
            { "WOS-HHDMDFP----", new DescData("Mine-naval (definite)", "WOS-HHDMD------") },
            { "WOS-HHDS--P----", new DescData("Snags/stumps", "WO--HH---------") },
            { "WOS-HHDWA------", new DescData("Wreck", "WO--HH---------") },
            { "WOS-HHDWA-P----", new DescData("Wreck (uncovers)", "WOS-HHDWA------") },
            { "WOS-HHDWB-P----", new DescData("Wreck (submerged)", "WOS-HHDWA------") },
            { "WO-DHHDB---L---", new DescData("Breakers", "WO--HH---------") },
            { "WOS-HHDR---L---", new DescData("Reef", "WO--HH---------") },
            { "WOS-HHDE--P----", new DescData("Eddies/overfalls/tide Rips", "WO--HH---------") },
            { "WO-DHHDD----A--", new DescData("Discolored Water", "WO--HH---------") },
            { "WO--BF---------", new DescData("Bottom Features", "WO--H----------") },
            { "WOS-BFC--------", new DescData("Bottom Characteristics", "WO--BF---------") },
            { "WOS-BFC-S-P----", new DescData("Sand", "WOS-BFC--------") },
            { "WOS-BFC-M-P----", new DescData("Mud", "WOS-BFC--------") },
            { "WOS-BFC-CLP----", new DescData("Clay", "WOS-BFC--------") },
            { "WOS-BFC-SIP----", new DescData("Silt", "WOS-BFC--------") },
            { "WOS-BFC-STP----", new DescData("Stones", "WOS-BFC--------") },
            { "WOS-BFC-G-P----", new DescData("Gravel", "WOS-BFC--------") },
            { "WOS-BFC-P-P----", new DescData("Pebbles", "WOS-BFC--------") },
            { "WOS-BFC-CBP----", new DescData("Cobbles", "WOS-BFC--------") },
            { "WOS-BFC-R-P----", new DescData("Rock", "WOS-BFC--------") },
            { "WOS-BFC-COP----", new DescData("Coral", "WOS-BFC--------") },
            { "WOS-BFC-SHP----", new DescData("Shell", "WOS-BFC--------") },
            { "WOS-BFQ--------", new DescData("Qualifying Terms", "WO--BF---------") },
            { "WOS-BFQ-F-P----", new DescData("Fine", "WOS-BFQ--------") },
            { "WOS-BFQ-M-P----", new DescData("Medium", "WOS-BFQ--------") },
            { "WOS-BFQ-C-P----", new DescData("Coarse", "WOS-BFQ--------") },
            { "WO--TCC--------", new DescData("Tide And Current", "WO--H----------") },
            { "WOS-TCCW--P----", new DescData("Water Turbulence", "WO--TCC--------") },
            { "WO-DTCCCFE-L---", new DescData("Current Flow - Ebb", "WO--TCC--------") },
            { "WO-DTCCCFF-L---", new DescData("Current Flow - Flood", "WO--TCC--------") },
            { "WOS-TCCTD-P----", new DescData("Tide Data Point", "WO--TCC--------") },
            { "WOS-TCCTG-P----", new DescData("Tide Gauge", "WO--TCC--------") },
            { "WO--O----------", new DescData("Oceanography", "WO-------------") },
            { "WO--OB---------", new DescData("Bioluminescence", "WO--O----------") },
            { "WO-DOBVA----A--", new DescData("Vdr Level 1-2", "WO--OB---------") },
            { "WO-DOBVB----A--", new DescData("Vdr Level 2-3", "WO--OB---------") },
            { "WO-DOBVC----A--", new DescData("Vdr Level 3-4", "WO--OB---------") },
            { "WO-DOBVD----A--", new DescData("Vdr Level 4-5", "WO--OB---------") },
            { "WO-DOBVE----A--", new DescData("Vdr Level 5-6", "WO--OB---------") },
            { "WO-DOBVF----A--", new DescData("Vdr Level 6-7", "WO--OB---------") },
            { "WO-DOBVG----A--", new DescData("Vdr Level 7-8", "WO--OB---------") },
            { "WO-DOBVH----A--", new DescData("Vdr Level 8-9", "WO--OB---------") },
            { "WO-DOBVI----A--", new DescData("Vdr Level 9-10", "WO--OB---------") },
            { "WO--BS---------", new DescData("Beach Slope", "WO--O----------") },
            { "WO-DBSF-----A--", new DescData("Flat", "WO--BS---------") },
            { "WO-DBSG-----A--", new DescData("Gentle", "WO--BS---------") },
            { "WO-DBSM-----A--", new DescData("Moderate", "WO--BS---------") },
            { "WO-DBST-----A--", new DescData("Steep", "WO--BS---------") },
            { "WO--G----------", new DescData("Geophysics/acoustics", "WO-------------") },
            { "WO--GM---------", new DescData("Mine Warfare Bottom Descriptors", "WO--G----------") },
            { "WO--GMS--------", new DescData("Miw-bottom Sediments", "WO--GM---------") },
            { "WO-DGMSR----A--", new DescData("Solid Rock", "WO--GMS--------") },
            { "WO-DGMSC----A--", new DescData("Clay", "WO--GMS--------") },
            { "WO-DGMSSVS--A--", new DescData("Very Coarse Sand", "WO--GMS--------") },
            { "WO-DGMSSC---A--", new DescData("Coarse Sand", "WO--GMS--------") },
            { "WO-DGMSSM---A--", new DescData("Medium Sand", "WO--GMS--------") },
            { "WO-DGMSSF---A--", new DescData("Fine Sand", "WO--GMS--------") },
            { "WO-DGMSSVF--A--", new DescData("Very Fine Sand", "WO--GMS--------") },
            { "WO-DGMSIVF--A--", new DescData("Very Fine Silt", "WO--GMS--------") },
            { "WO-DGMSIF---A--", new DescData("Fine Silt", "WO--GMS--------") },
            { "WO-DGMSIM---A--", new DescData("Medium Silt", "WO--GMS--------") },
            { "WO-DGMSIC---A--", new DescData("Coarse Silt", "WO--GMS--------") },
            { "WO-DGMSB----A--", new DescData("Boulders", "WO--GMS--------") },
            { "WO-DGMS-CO--A--", new DescData("Cobbles, Oyster Shells", "WO--GMS--------") },
            { "WO-DGMS-PH--A--", new DescData("Pebbles, Shells", "WO--GMS--------") },
            { "WO-DGMS-SH--A--", new DescData("Sand And Shells", "WO--GMS--------") },
            { "WO-DGML-----A--", new DescData("Land", "WO--GMS--------") },
            { "WO-DGMN-----A--", new DescData("No Data", "WO--GMS--------") },
            { "WO--GMR--------", new DescData("Bottom Roughness", "WO--GM---------") },
            { "WO-DGMRS----A--", new DescData("Smooth", "WO--GMR--------") },
            { "WO-DGMRM----A--", new DescData("Moderate", "WO--GMR--------") },
            { "WO-DGMRR----A--", new DescData("Rough", "WO--GMR--------") },
            { "WO--GMC--------", new DescData("Clutter (bottom)", "WO--GM---------") },
            { "WO-DGMCL----A--", new DescData("Low", "WO--GMC--------") },
            { "WO-DGMCM----A--", new DescData("Medium", "WO--GMC--------") },
            { "WO-DGMCH----A--", new DescData("High", "WO--GMC--------") },
            { "WO--GMIB-------", new DescData("Impact Burial", "WO--GM---------") },
            { "WO-DGMIBA---A--", new DescData("0%", "WO--GMIB-------") },
            { "WO-DGMIBB---A--", new DescData("0-10%", "WO--GMIB-------") },
            { "WO-DGMIBC---A--", new DescData("10-20%", "WO--GMIB-------") },
            { "WO-DGMIBD---A--", new DescData("20-75%", "WO--GMIB-------") },
            { "WO-DGMIBE---A--", new DescData(">75%", "WO--GMIB-------") },
            { "WO--GMBC-------", new DescData("Miw Bottom Category", "WO--GM---------") },
            { "WO-DGMBCA---A--", new DescData("A", "WO--GMBC-------") },
            { "WO-DGMBCB---A--", new DescData("B", "WO--GMBC-------") },
            { "WO-DGMBCC---A--", new DescData("C", "WO--GMBC-------") },
            { "WO--GMBT-------", new DescData("Miw Bottom Type", "WO--GM---------") },
            { "WO-DGMBTA---A--", new DescData("A1", "WO--GMBT-------") },
            { "WO-DGMBTB---A--", new DescData("A2", "WO--GMBT-------") },
            { "WO-DGMBTC---A--", new DescData("A3", "WO--GMBT-------") },
            { "WO-DGMBTD---A--", new DescData("B1", "WO--GMBT-------") },
            { "WO-DGMBTE---A--", new DescData("B2", "WO--GMBT-------") },
            { "WO-DGMBTF---A--", new DescData("B3", "WO--GMBT-------") },
            { "WO-DGMBTG---A--", new DescData("C1", "WO--GMBT-------") },
            { "WO-DGMBTH---A--", new DescData("C2", "WO--GMBT-------") },
            { "WO-DGMBTI---A--", new DescData("C3", "WO--GMBT-------") },
            { "WO--L----------", new DescData("Limits", "WO-------------") },
            { "WO-DL-ML---L---", new DescData("Maritime Limit Boundary", "WO--L----------") },
            { "WO-DL-MA----A--", new DescData("Maritime Area", "WO--L----------") },
            { "WO-DL-RA---L---", new DescData("Restricted Area", "WO--L----------") },
            { "WO-DL-SA----A--", new DescData("Swept Area", "WO--L----------") },
            { "WO-DL-TA----A--", new DescData("Training Area", "WO--L----------") },
            { "WO-DL-O-----A--", new DescData("Operator-defined", "WO--L----------") },
            { "WO--M----------", new DescData("Man-made Structures", "WO-------------") },
            { "WO-DMCA----L---", new DescData("Submarine Cable", "WO--M----------") },
            { "WO-DMCC-----A--", new DescData("Submerged Crib", "WO--M----------") },
            { "WO-DMCD----L---", new DescData("Canal", "WO--M----------") },
            { "WOS-MF----P----", new DescData("Ford", "WO--M----------") },
            { "WOS-ML----P----", new DescData("Lock", "WO--M----------") },
            { "WOS-MOA---P----", new DescData("Oil/gas Rig", "WO--M----------") },
            { "WO-DMOA-----A--", new DescData("Oil/gas Rig Field", "WO--M----------") },
            { "WO-DMPA----L---", new DescData("Pipelines/pipe", "WO--M----------") },
            { "WOS-MPA---P----", new DescData("Pile/piling/post", "WO--M----------") },
            { "WS-------------", new DescData("Space", "W--------------") }
        };

        /// <summary>
        /// A dictionary of all the templates in Appendix D.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryD = new Dictionary<string, DescData>
          {
            { "I--------------", new DescData("Signals Intelligence", null) },
            { "I*P*--------***", new DescData("Space Track", "I--------------") },
            { "I*P*S-------***", new DescData("Signal Intercept", "I*P*--------***") },
            { "I*P*SC------***", new DescData("Communications", "I*P*S-------***") },
            { "I*P*SCD-----***", new DescData("Satellite Downlink", "I*P*SC------***") },
            { "I*P*SR------***", new DescData("Radar", "I*P*S-------***") },
            { "I*P*SRD-----***", new DescData("Data Transmission", "I*P*SR------***") },
            { "I*P*SRE-----***", new DescData("Earth Surveillance", "I*P*SR------***") },
            { "I*P*SRI-----***", new DescData("IFF (Transponder)", "I*P*SR------***") },
            { "I*P*SRM-----***", new DescData("Multifunction", "I*P*SR------***") },
            { "I*P*SRT-----***", new DescData("Target Acquisition", "I*P*SR------***") },
            { "I*P*SRS-----***", new DescData("Space", "I*P*SR------***") },
            { "I*P*SRU-----***", new DescData("Unknown", "I*P*SR------***") },
            { "I*A*--------***", new DescData("Air Track", "I--------------") },
            { "I*A*S-------***", new DescData("Signal Intercept", "I*A*--------***") },
            { "I*A*SC------***", new DescData("Communications", "I*A*S-------***") },
            { "I*A*SCC-----***", new DescData("Cellular/Mobile", "I*A*SC------***") },
            { "I*A*SCO-----***", new DescData("Omni-Line Of Sight (LOS)", "I*A*SC------***") },
            { "I*A*SCP-----***", new DescData("Point-to-point Line Of Sight (LOS)", "I*A*SC------***") },
            { "I*A*SCS-----***", new DescData("Satellite Uplink", "I*A*SC------***") },
            { "I*A*SR------***", new DescData("Radar", "I*A*S-------***") },
            { "I*A*SRAI----***", new DescData("Airborne Intercept", "I*A*SR------***") },
            { "I*A*SRAS----***", new DescData("Airborne Search & Bombing", "I*A*SR------***") },
            { "I*A*SRC-----***", new DescData("Controlled Intercept", "I*A*SR------***") },
            { "I*A*SRD-----***", new DescData("Data Transmission", "I*A*SR------***") },
            { "I*A*SRE-----***", new DescData("Early Warning", "I*A*SR------***") },
            { "I*A*SRF-----***", new DescData("Fire Control", "I*A*SR------***") },
            { "I*A*SRI-----***", new DescData("IFF (Transponder)", "I*A*SR------***") },
            { "I*A*SRMA----***", new DescData("Missile Acquisition", "I*A*SR------***") },
            { "I*A*SRMD----***", new DescData("Missile Downlink", "I*A*SR------***") },
            { "I*A*SRMG----***", new DescData("Missile Guidance", "I*A*SR------***") },
            { "I*A*SRMT----***", new DescData("Missile Tracking", "I*A*SR------***") },
            { "I*A*SRMF----***", new DescData("Multifunction", "I*A*SR------***") },
            { "I*A*SRTI----***", new DescData("Target Illuminator", "I*A*SR------***") },
            { "I*A*SRTA----***", new DescData("Target Acquisition", "I*A*SR------***") },
            { "I*A*SRTT----***", new DescData("Target Tracking", "I*A*SR------***") },
            { "I*A*SRU-----***", new DescData("Unknown", "I*A*SR------***") },
            { "I*G*--------***", new DescData("Ground Track", "I--------------") },
            { "I*G*S-------***", new DescData("Signal Intercept", "I*G*--------***") },
            { "I*G*SC------***", new DescData("Communications", "I*G*S-------***") },
            { "I*G*SCC-----***", new DescData("Cellular/Mobile", "I*G*SC------***") },
            { "I*G*SCO-----***", new DescData("Omni-Line Of Sight (LOS)", "I*G*SC------***") },
            { "I*G*SCP-----***", new DescData("Point-to-point Line Of Sight (LOS)", "I*G*SC------***") },
            { "I*G*SCS-----***", new DescData("Satellite Uplink", "I*G*SC------***") },
            { "I*G*SCT-----***", new DescData("Tropospheric Scatter", "I*G*SC------***") },
            { "I*G*SR------***", new DescData("Radar", "I*G*S-------***") },
            { "I*G*SRAT----***", new DescData("Air Traffic Control", "I*G*SR------***") },
            { "I*G*SRAA----***", new DescData("Antiaircraft", "I*G*SR------***") },
            { "I*G*SRB-----***", new DescData("Battlefield Surveillance", "I*G*SR------***") },
            { "I*G*SRCS----***", new DescData("Coastal Surveillance", "I*G*SR------***") },
            { "I*G*SRCA----***", new DescData("Controlled Approach", "I*G*SR------***") },
            { "I*G*SRD-----***", new DescData("Data Transmission", "I*G*SR------***") },
            { "I*G*SRE-----***", new DescData("Early Warning", "I*G*SR------***") },
            { "I*G*SRF-----***", new DescData("Fire Control", "I*G*SR------***") },
            { "I*G*SRH-----***", new DescData("Height Finding", "I*G*SR------***") },
            { "I*G*SRI-----***", new DescData("Identification Friend/Foe (Interrogator)", "I*G*SR------***") },
            { "I*G*SRMM----***", new DescData("Meteorological (Military)", "I*G*SR------***") },
            { "I*G*SRMA----***", new DescData("Missile Acquisition", "I*G*SR------***") },
            { "I*G*SRMG----***", new DescData("Missile Guidance", "I*G*SR------***") },
            { "I*G*SRMT----***", new DescData("Missile Tracking", "I*G*SR------***") },
            { "I*G*SRMF----***", new DescData("Multifunction", "I*G*SR------***") },
            { "I*G*SRS-----***", new DescData("Shell Tracking", "I*G*SR------***") },
            { "I*G*SRTA----***", new DescData("Target Acquisition", "I*G*SR------***") },
            { "I*G*SRTI----***", new DescData("Target Illuminator", "I*G*SR------***") },
            { "I*G*SRTT----***", new DescData("Target Tracking", "I*G*SR------***") },
            { "I*G*SRU-----***", new DescData("Unknown", "I*G*SR------***") },
            { "I*S*--------***", new DescData("Sea Surface Track", "I--------------") },
            { "I*S*S-------***", new DescData("Signal Intercept", "I*S*--------***") },
            { "I*S*SC------***", new DescData("Communications", "I*S*S-------***") },
            { "I*S*SCC-----***", new DescData("Cellular/Mobile", "I*S*SC------***") },
            { "I*S*SCO-----***", new DescData("Omni-Line Of Sight (LOS)", "I*S*SC------***") },
            { "I*S*SCP-----***", new DescData("Point-to-point Line Of Sight (LOS)", "I*S*SC------***") },
            { "I*S*SCS-----***", new DescData("Satellite Uplink", "I*S*SC------***") },
            { "I*S*SR------***", new DescData("Radar", "I*S*S-------***") },
            { "I*S*SRAT----***", new DescData("Air Traffic Control", "I*S*SR------***") },
            { "I*S*SRAA----***", new DescData("Antiaircraft", "I*S*SR------***") },
            { "I*S*SRCA----***", new DescData("Controlled Approach", "I*S*SR------***") },
            { "I*S*SRCI----***", new DescData("Controlled Intercept", "I*S*SR------***") },
            { "I*S*SRD-----***", new DescData("Data Transmission", "I*S*SR------***") },
            { "I*S*SRE-----***", new DescData("Early Warning", "I*S*SR------***") },
            { "I*S*SRF-----***", new DescData("Fire Control", "I*S*SR------***") },
            { "I*S*SRH-----***", new DescData("Height Finding", "I*S*SR------***") },
            { "I*S*SRI-----***", new DescData("Identification Friend/Foe (Interrogator)", "I*S*SR------***") },
            { "I*S*SRMM----***", new DescData("Meteorological (Military)", "I*S*SR------***") },
            { "I*S*SRMA----***", new DescData("Missile Acquisition", "I*S*SR------***") },
            { "I*S*SRMG----***", new DescData("Missile Guidance", "I*S*SR------***") },
            { "I*S*SRMT----***", new DescData("Missile Tracking", "I*S*SR------***") },
            { "I*S*SRMF----***", new DescData("Multifunction", "I*S*SR------***") },
            { "I*S*SRS-----***", new DescData("Surface Search", "I*S*SR------***") },
            { "I*S*SRTA----***", new DescData("Target Acquisition", "I*S*SR------***") },
            { "I*S*SRTI----***", new DescData("Target Illuminator", "I*S*SR------***") },
            { "I*S*SRTT----***", new DescData("Target Tracking", "I*S*SR------***") },
            { "I*S*SRU-----***", new DescData("Unknown", "I*S*SR------***") },
            { "I*U*--------***", new DescData("Subsurface Track", "I--------------") },
            { "I*U*S-------***", new DescData("Signal Intercept", "I*U*--------***") },
            { "I*U*SC------***", new DescData("Communications", "I*U*S-------***") },
            { "I*U*SCO-----***", new DescData("Omni-Line Of Sight (LOS)", "I*U*SC------***") },
            { "I*U*SCP-----***", new DescData("Point-to-point Line Of Sight (LOS)", "I*U*SC------***") },
            { "I*U*SCS-----***", new DescData("Satellite Uplink", "I*U*SC------***") },
            { "I*U*SR------***", new DescData("Radar", "I*U*S-------***") },
            { "I*U*SRD-----***", new DescData("Data Transmission", "I*U*SR------***") },
            { "I*U*SRE-----***", new DescData("Early Warning", "I*U*SR------***") },
            { "I*U*SRM-----***", new DescData("Multifunction", "I*U*SR------***") },
            { "I*U*SRS-----***", new DescData("Surface Search", "I*U*SR------***") },
            { "I*U*SRT-----***", new DescData("Target Acquisition", "I*U*SR------***") },
            { "I*U*SRU-----***", new DescData("Unknown", "I*U*SR------***") }
          };

        /// <summary>
        /// A dictionary of all the templates in Appendix E.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryE = new Dictionary<string, DescData>
        {
            { "O--------------", new DescData("Stability Operations (SO)", null) },
            { "O*V*------*****", new DescData("Violent Activities (death causing)", "O--------------") },
            { "O*V*A-----*****", new DescData("Arson/fire", "O*V*------*****") },
            { "O*V*M-----*****", new DescData("Killing (general)", "O*V*------*****") },
            { "O*V*MA----*****", new DescData("Murder", "O*V*M-----*****") },
            { "O*V*MB----*****", new DescData("Execution", "O*V*M-----*****") },
            { "O*V*MC----*****", new DescData("Assassination", "O*V*M-----*****") },
            { "O*V*B-----*****", new DescData("Bomb/bombing", "O*V*------*****") },
            { "O*V*Y-----*****", new DescData("Booby trap", "O*V*------*****") },
            { "O*V*D-----*****", new DescData("Drive-by shooting", "O*V*------*****") },
            { "O*V*S-----*****", new DescData("Sniping", "O*V*------*****") },
            { "O*V*P-----*****", new DescData("Poisoning", "O*V*------*****") },
            { "O*V*E-----*****", new DescData("Explosion", "O*V*------*****") },
            { "O*V*EI----*****", new DescData("IED explosion", "O*V*E-----*****") },
            { "O*L*------*****", new DescData("Locations", "O--------------") },
            { "O*L*B-----*****", new DescData("Black list location", "O*L*------*****") },
            { "O*L*G-----*****", new DescData("Gray list location", "O*L*------*****") },
            { "O*L*W-----*****", new DescData("White list location", "O*L*------*****") },
            { "O*L*M-----*****", new DescData("Mass grave location", "O*L*------*****") },
            { "O*O*------*****", new DescData("Operations", "O--------------") },
            { "O*O*P-----*****", new DescData("Patrolling", "O*O*------*****") },
            { "O*O*R-----*****", new DescData("Recruitment", "O*O*------*****") },
            { "O*O*RW----*****", new DescData("Recruitment (willing)", "O*O*R-----*****") },
            { "O*O*RC----*****", new DescData("Recruitment (coerced/impressed)", "O*O*R-----*****") },
            { "O*O*D-----*****", new DescData("Demonstration", "O*O*------*****") },
            { "O*O*M-----*****", new DescData("Mine laying", "O*O*------*****") },
            { "O*O*Y-----*****", new DescData("Psychological operations (PsyOp)", "O*O*------*****") },
            { "O*O*YT----*****", new DescData("PsyOp (TV and radio propaganda)", "O*O*Y-----*****") },
            { "O*O*YW----*****", new DescData("PsyOp (written propaganda)", "O*O*Y-----*****") },
            { "O*O*YH----*****", new DescData("House-to-house propaganda", "O*O*Y-----*****") },
            { "O*O*F-----*****", new DescData("Foraging/searching", "O*O*------*****") },
            { "O*O*S-----*****", new DescData("Spy", "O*O*------*****") },
            { "O*O*O-----*****", new DescData("Food distribution", "O*O*------*****") },
            { "O*O*E-----*****", new DescData("Extortion", "O*O*------*****") },
            { "O*O*H-----*****", new DescData("Hijacking", "O*O*------*****") },
            { "O*O*HT----*****", new DescData("Hijacking (vehicle)", "O*O*H-----*****") },
            { "O*O*HA----*****", new DescData("Hijacking (airplane)", "O*O*H-----*****") },
            { "O*O*HV----*****", new DescData("Hijacking (boat)", "O*O*H-----*****") },
            { "O*O*K-----*****", new DescData("Kidnapping", "O*O*------*****") },
            { "O*O*KA----*****", new DescData("Attempted", "O*O*K-----*****") },
            { "O*O*A-----*****", new DescData("Arrest", "O*O*------*****") },
            { "O*O*U-----*****", new DescData("Drug operation", "O*O*------*****") },
            { "O*O*C-----*****", new DescData("Composite loss", "O*O*------*****") },
            { "O*O*CA----*****", new DescData("Combat", "O*O*C-----*****") },
            { "O*O*CB----*****", new DescData("Accident", "O*O*C-----*****") },
            { "O*O*CC----*****", new DescData("Other", "O*O*C-----*****") },
            { "O*I*------*****", new DescData("Items", "O--------------") },
            { "O*I*R-----*****", new DescData("Refugees", "O*I*------*****") },
            { "O*I*S-----*****", new DescData("Safe house", "O*I*------*****") },
            { "O*I*G-----*****", new DescData("Graffiti", "O*I*------*****") },
            { "O*I*V-----*****", new DescData("Vandalism/loot/ransack/plunder/sack", "O*I*------*****") },
            { "O*I*I-----*****", new DescData("Known insurgent vehicle", "O*I*------*****") },
            { "O*I*D-----*****", new DescData("Drug vehicle", "O*I*------*****") },
            { "O*I*F-----*****", new DescData("Internal security force", "O*I*------*****") },
            { "O*P*------*****", new DescData("Individual", "O--------------") },
            { "O*P*A-----*****", new DescData("Leader", "O*P*------*****") },
            { "O*P*B-----*****", new DescData("Targeted", "O*P*------*****") },
            { "O*P*C-----*****", new DescData("Terrorist", "O*P*------*****") },
            { "O*G*------*****", new DescData("Nonmilitary group or organization", "O--------------") },
            { "O*G*A-----*****", new DescData("Displaced persons, refugees, and evacuees", "O*G*------*****") },
            { "O*G*B-----*****", new DescData("Nongovernmental organization (NGO)", "O*G*------*****") },
            { "O*G*C-----*****", new DescData("Terrorist", "O*G*------*****") },
            { "O*G*D-----*****", new DescData("Religious", "O*G*------*****") },
            { "O*G*E-----*****", new DescData("Foreign fighters", "O*G*------*****") },
            { "O*G*F-----*****", new DescData("Gang", "O*G*------*****") },
            { "O*R*------*****", new DescData("Rape", "O--------------") },
            { "O*R*A-----*****", new DescData("Attempted", "O*R*------*****") }
        };

        /// <summary>
        /// A dictionary of all the templates in Appendix G.
        /// </summary>
        private static readonly IDictionary<string, DescData> DictionaryG = new Dictionary<string, DescData>
          {
            { "E--------------", new DescData("Emergency Management Symbols", null) },
            { "E-I-------*****", new DescData("Incident", "E--------------") },
            { "E*I*A-----*****", new DescData("Civil Disturbance Incident", "E-I-------*****") },
            { "O*O*D-----*****", new DescData("Civil Demonstration", "E*I*A-----*****") },
            { "O*I*AC----*****", new DescData("Civil Displaced Population", "E*I*A-----*****") },
            { "E*I*AC----*****", new DescData("Civil Rioting", "E*I*A-----*****") },
            { "E*I*B-----*****", new DescData("Criminal Activity Incident", "E-I-------*****") },
            { "E*I*BA----*****", new DescData("Bomb Threat", "E*I*B-----*****") },
            { "O*V*B-----*****", new DescData("Bomb", "E*I*B-----*****") },
            { "E*I*BC----*****", new DescData("Explosion", "E*I*B-----*****") },
            { "E*I*BD----*****", new DescData("Looting", "E*I*B-----*****") },
            { "O*V*P-----*****", new DescData("Poisoning", "E*I*B-----*****") },
            { "E*I*BF----*****", new DescData("Shooting", "E*I*B-----*****") },
            { "E*I*C-----*****", new DescData("Fire Incident", "E-I-------*****") },
            { "E*I*CA----*****", new DescData("Hot Spot", "E*I*C-----*****") },
            { "E*I*CB----*****", new DescData("Non-residential Fire", "E*I*C-----*****") },
            { "E*I*CC----*****", new DescData("Origin (of Fire)", "E*I*C-----*****") },
            { "E*I*CD----*****", new DescData("Residential Fire", "E*I*C-----*****") },
            { "E*I*CE----*****", new DescData("School Fire", "E*I*C-----*****") },
            { "E*I*CF----*****", new DescData("Smoke", "E*I*C-----*****") },
            { "E*I*CG----*****", new DescData("Special Needs Fire", "E*I*C-----*****") },
            { "E*I*CH----*****", new DescData("Wild Fire", "E*I*C-----*****") },
            { "E*I*D-----*****", new DescData("Hazardous Material Incident", "E-I-------*****") },
            { "E*I*DA----*****", new DescData("Chemical Agent", "E*I*D-----*****") },
            { "E*I*DB----*****", new DescData("Corrosive Material", "E*I*D-----*****") },
            { "E*I*DC----*****", new DescData("Hazardous When Wet", "E*I*D-----*****") },
            { "E*I*DD----*****", new DescData("Explosive", "E*I*D-----*****") },
            { "E*I*DE----*****", new DescData("Flammable Gas", "E*I*D-----*****") },
            { "E*I*DF----*****", new DescData("Flammable Liquid", "E*I*D-----*****") },
            { "E*I*DG----*****", new DescData("Flammable Solid", "E*I*D-----*****") },
            { "E*I*DH----*****", new DescData("Non-flammable Gas", "E*I*D-----*****") },
            { "E*I*DI----*****", new DescData("Organic Peroxide", "E*I*D-----*****") },
            { "E*I*DJ----*****", new DescData("Oxidizer", "E*I*D-----*****") },
            { "E*I*DK----*****", new DescData("Radioactive Material", "E*I*D-----*****") },
            { "E*I*DL----*****", new DescData("Spontaneously Combustible", "E*I*D-----*****") },
            { "E*I*DM----*****", new DescData("Toxic Gas", "E*I*D-----*****") },
            { "E*I*DN----*****", new DescData("Toxic And Infectious", "E*I*D-----*****") },
            { "E*I*DO----*****", new DescData("Unexploded Ordnance", "E*I*D-----*****") },
            { "E*I*E-----*****", new DescData("Air Incident", "E-I-------*****") },
            { "E*I*EA----*****", new DescData("Air Accident", "E*I*E-----*****") },
            { "O*O*HA----*****", new DescData("Air Hijacking", "E*I*E-----*****") },
            { "E*I*F-----*****", new DescData("Marine Incident", "E-I-------*****") },
            { "E*I*FA----*****", new DescData("Marine Accident", "E*I*F-----*****") },
            { "O*O*HV----*****", new DescData("Marine Hijacking", "E*I*F-----*****") },
            { "E*I*G-----*****", new DescData("Rail Incident", "E-I-------*****") },
            { "E*I*GA----*****", new DescData("Rail Accident", "E*I*G-----*****") },
            { "E*I*GB----*****", new DescData("Rail Hijacking", "E*I*G-----*****") },
            { "E*I*H-----*****", new DescData("Vehicle Incident", "E-I-------*****") },
            { "E*I*HA----*****", new DescData("Vehicle Accident", "E*I*H-----*****") },
            { "O*O*HT----*****", new DescData("Vehicle Hijacking", "E*I*H-----*****") },
            { "E-N-------*****", new DescData("Natural Events", "E--------------") },
            { "E*N*A-----*****", new DescData("Geologic", "E-N-------*****") },
            { "E*N*AA----*****", new DescData("Aftershock", "E*N*A-----*****") },
            { "E*N*AB----*****", new DescData("Avalanche", "E*N*A-----*****") },
            { "E*N*AC----*****", new DescData("Earthquake Epicenter", "E*N*A-----*****") },
            { "E*N*AD----*****", new DescData("Landslide", "E*N*A-----*****") },
            { "E*N*AE----*****", new DescData("Subsidence", "E*N*A-----*****") },
            { "WAS-WSVE--P----", new DescData("Volcanic Eruption", "E*N*A-----*****") },
            { "E*N*AG----*****", new DescData("Volcanic Threat", "E*N*A-----*****") },
            { "E*N*B-----*****", new DescData("Hydro-meteorological", "E-N-------*****") },
            { "WAS-WSD-LIP----", new DescData("Drizzle", "E*N*B-----*****") },
            { "E*N*BB----*****", new DescData("Drought", "E*N*B-----*****") },
            { "E*N*BC----*****", new DescData("Flood", "E*N*B-----*****") },
            { "WAS-WSFGSOP----", new DescData("Fog", "E*N*B-----*****") },
            { "WAS-WSGRL-P----", new DescData("Hail", "E*N*B-----*****") },
            { "E*N*BF----*****", new DescData("Inversion", "E*N*B-----*****") },
            { "WAS-WSR-LIP----", new DescData("Rain", "E*N*B-----*****") },
            { "WAS-WSDSLMP----", new DescData("Sand Dust Storm", "E*N*B-----*****") },
            { "WAS-WSS-LIP----", new DescData("Snow", "E*N*B-----*****") },
            { "WAS-WSTMH-P----", new DescData("Thunder Storm", "E*N*B-----*****") },
            { "WAS-WST-FCP----", new DescData("Tornado", "E*N*B-----*****") },
            { "WAS-WSTSS-P----", new DescData("Tropical Cyclone", "E*N*B-----*****") },
            { "E*N*BM----*****", new DescData("Tsunami", "E*N*B-----*****") },
            { "E*N*C-----*****", new DescData("Infestation", "E-N-------*****") },
            { "E*N*CA----*****", new DescData("Bird Infestation", "E*N*C-----*****") },
            { "E*N*CB----*****", new DescData("Insect Infestation", "E*N*C-----*****") },
            { "E*N*CC----*****", new DescData("Microbial Infestation", "E*N*C-----*****") },
            { "E*N*CD----*****", new DescData("Reptile Infestation", "E*N*C-----*****") },
            { "E*N*CE----*****", new DescData("Rodent Infestation", "E*N*C-----*****") },
            { "E-O-------*****", new DescData("Operations", "E--------------") },
            { "E*O*A-----*****", new DescData("Emergency Medical Operation", "E-O-------*****") },
            { "E*O*AA----*****", new DescData("Emergency Medical Operation Unit", "E*O*A-----*****") },
            { "E*O*AB----*****", new DescData("Emergency Medical Operation Equipment", "E*O*A-----*****") },
            { "E*O*AC----H****", new DescData("Emergency Medical Operation Installation", "E*O*A-----*****") },
            { "E*O*AD----H****", new DescData("Emt Station Location", "E*O*A-----*****") },
            { "E*O*AE----*****", new DescData("Ambulance", "E*O*A-----*****") },
            { "E*O*AF----*****", new DescData("Medical Evacuation Helicopter", "E*O*A-----*****") },
            { "E*O*AG----H****", new DescData("Health Department Facility", "E*O*A-----*****") },
            { "S*G*IXH---H****", new DescData("Hospital", "E*O*A-----*****") },
            { "S*S*NM----*****", new DescData("Hospital Ship", "E*O*A-----*****") },
            { "E*O*AJ----H****", new DescData("Medical Facilities Out Patient", "E*O*A-----*****") },
            { "E*O*AK----H****", new DescData("Morgue", "E*O*A-----*****") },
            { "E*O*AL----H****", new DescData("Pharmacy", "E*O*A-----*****") },
            { "E*O*AM----H****", new DescData("Triage", "E*O*A-----*****") },
            { "E*O*B-----*****", new DescData("Emergency Operation", "E-O-------*****") },
            { "E*O*BA----*****", new DescData("Emergency Operation Unit", "E*O*B-----*****") },
            { "E*O*BB----*****", new DescData("Emergency Operation Equipment", "E*O*B-----*****") },
            { "E*O*BC----H****", new DescData("Emergency Operation Installation", "E*O*B-----*****") },
            { "E*O*BD----*****", new DescData("Emergency Collection Evacuation Point", "E*O*B-----*****") },
            { "E*O*BE----H****", new DescData("Emergency Incident Command Center", "E*O*B-----*****") },
            { "E*O*BF----H****", new DescData("Emergency Operations Center", "E*O*B-----*****") },
            { "E*O*BG----H****", new DescData("Emergency Public Information Center", "E*O*B-----*****") },
            { "E*O*BH----H****", new DescData("Emergency Shelter", "E*O*B-----*****") },
            { "E*O*BI----H****", new DescData("Emergency Staging Area", "E*O*B-----*****") },
            { "E*O*BJ-----A***", new DescData("Emergency Team", "E*O*B-----*****") },
            { "E*O*BK----H****", new DescData("Emergency Water Distribution Center", "E*O*B-----*****") },
            { "E*O*BL----H****", new DescData("Emergency Food Distribution Center", "E*O*B-----*****") },
            { "E*O*C-----*****", new DescData("Fire Fighting Operation", "E-O-------*****") },
            { "E*O*CA----*****", new DescData("Fire Fighting Operation Unit", "E*O*C-----*****") },
            { "E*O*CB----*****", new DescData("Fire Fighting Operation Equipment", "E*O*C-----*****") },
            { "E*O*CC----*****", new DescData("Fire Hydrant", "E*O*C-----*****") },
            { "E*O*CD----H****", new DescData("Other Water Supply Location", "E*O*C-----*****") },
            { "E*O*CE----H****", new DescData("Fire Station", "E*O*C-----*****") },
            { "E*O*D-----*****", new DescData("Law Enforcement Operation", "E-O-------*****") },
            { "E*O*DA----*****", new DescData("Law Enforcement Operation Unit", "E*O*D-----*****") },
            { "E*O*DB----*****", new DescData("Law Enforcement Operation Equipment", "E*O*D-----*****") },
            { "E*O*DC----H****", new DescData("Law Enforcement Operation Installation", "E*O*D-----*****") },
            { "E*O*DD----*****", new DescData("Atf", "E*O*D-----*****") },
            { "E*O*DDA---*****", new DescData("Atf Unit", "E*O*DD----*****") },
            { "E*O*DDB---*****", new DescData("Atf Equipment", "E*O*DD----*****") },
            { "E*O*DDC---H****", new DescData("Atf Installation", "E*O*DD----*****") },
            { "E*O*DE----*****", new DescData("Border Patrol", "E*O*D-----*****") },
            { "E*O*DEA---*****", new DescData("Border Patrol Unit", "E*O*DE----*****") },
            { "E*O*DEB---*****", new DescData("Border Patrol Equipment", "E*O*DE----*****") },
            { "E*O*DEC---H****", new DescData("Border Patrol Installation", "E*O*DE----*****") },
            { "E*O*DF----*****", new DescData("Customs Service", "E*O*D-----*****") },
            { "E*O*DFA---*****", new DescData("Customs Service Unit", "E*O*DF----*****") },
            { "E*O*DFB---*****", new DescData("Customs Service Equipment", "E*O*DF----*****") },
            { "E*O*DFC---H****", new DescData("Customs Service Installation", "E*O*DF----*****") },
            { "E*O*DG----*****", new DescData("Dea", "E*O*D-----*****") },
            { "E*O*DGA---*****", new DescData("Dea Unit", "E*O*DG----*****") },
            { "E*O*DGB---*****", new DescData("Dea Equipment", "E*O*DG----*****") },
            { "E*O*DGC---H****", new DescData("Dea Installation", "E*O*DG----*****") },
            { "E*O*DH----*****", new DescData("Doj", "E*O*D-----*****") },
            { "E*O*DHA---*****", new DescData("Doj Unit", "E*O*DH----*****") },
            { "E*O*DHB---*****", new DescData("Doj Equipment", "E*O*DH----*****") },
            { "E*O*DHC---H****", new DescData("Doj Installation", "E*O*DH----*****") },
            { "E*O*DI----*****", new DescData("Fbi", "E*O*D-----*****") },
            { "E*O*DIA---*****", new DescData("Fbi Unit", "E*O*DI----*****") },
            { "E*O*DIB---*****", new DescData("Fbi Equipment", "E*O*DI----*****") },
            { "E*O*DIC---H****", new DescData("Fbi Installation", "E*O*DI----*****") },
            { "E*O*DJ----*****", new DescData("Police", "E*O*D-----*****") },
            { "S*G*UULC--*****", new DescData("Police Unit", "E*O*DJ----*****") },
            { "E*O*DJB---*****", new DescData("Police Equipment", "E*O*DJ----*****") },
            { "E*O*DJC---H****", new DescData("Police Installation", "E*O*DJ----*****") },
            { "E*O*DK----*****", new DescData("Prison", "E*O*D-----*****") },
            { "E*O*DL----*****", new DescData("Secret Service", "E*O*D-----*****") },
            { "E*O*DLA---*****", new DescData("Secret Service Unit", "E*O*DL----*****") },
            { "E*O*DLB---*****", new DescData("Secret Service Equipment", "E*O*DL----*****") },
            { "E*O*DLC---H****", new DescData("Secret Service Installation", "E*O*DL----*****") },
            { "E*O*DM----*****", new DescData("Tsa", "E*O*D-----*****") },
            { "E*O*DMA---*****", new DescData("Tsa Unit", "E*O*DM----*****") },
            { "E*O*DMB---*****", new DescData("Tsa Equipment", "E*O*DM----*****") },
            { "E*O*DMC---H****", new DescData("Tsa Installation", "E*O*DM----*****") },
            { "E*O*DN----*****", new DescData("Coast Guard", "E*O*D-----*****") },
            { "E*O*DNA---*****", new DescData("Coast Guard Unit", "E*O*DN----*****") },
            { "S*S*XL----*****", new DescData("Coast Guard Equipment", "E*O*DN----*****") },
            { "E*O*DNC---H****", new DescData("Coast Guard Installation", "E*O*DN----*****") },
            { "E*O*DO----*****", new DescData("Us Marshals Service", "E*O*D-----*****") },
            { "E*O*DOA---*****", new DescData("Us Marshals Service Unit", "E*O*DO----*****") },
            { "E*O*DOB---*****", new DescData("Us Marshals Service Equipment", "E*O*DO----*****") },
            { "E*O*DOC---H****", new DescData("Us Marshals Service Installation", "E*O*DO----*****") },
            { "S*G*ES----*****", new DescData("Sensor", "E-O-------*****") },
            { "E*O*EA----*****", new DescData("Biological Sensor", "S*G*ES----*****") },
            { "E*O*EB----*****", new DescData("Chemical Sensor", "S*G*ES----*****") },
            { "E*O*EC----*****", new DescData("Intrusion Sensor", "S*G*ES----*****") },
            { "E*O*ED----*****", new DescData("Nuclear Sensor", "S*G*ES----*****") },
            { "E*O*EE----*****", new DescData("Radiological Sensor", "S*G*ES----*****") },
            { "E-F-------*****", new DescData("Infrastructure", "E--------------") },
            { "E*F*A-----H****", new DescData("Agriculture And Food Infrastructure", "E-F-------*****") },
            { "E*F*AA----H****", new DescData("Agricultural Laboratory", "E*F*A-----H****") },
            { "E*F*AB----H****", new DescData("Animal Feedlot", "E*F*A-----H****") },
            { "E*F*AC----H****", new DescData("Commercial Food Distribution Center", "E*F*A-----H****") },
            { "E*F*AD----H****", new DescData("Farm/ranch", "E*F*A-----H****") },
            { "E*F*AE----H****", new DescData("Food Production Center", "E*F*A-----H****") },
            { "E*F*AF----H****", new DescData("Food Retail", "E*F*A-----H****") },
            { "E*F*AG----H****", new DescData("Grain Storage", "E*F*A-----H****") },
            { "E*F*B-----H****", new DescData("Banking Finance And Insurance Infrastructure", "E-F-------*****") },
            { "E*F*BA----*****", new DescData("Atm", "E*F*B-----H****") },
            { "E*F*BB----H****", new DescData("Bank", "E*F*B-----H****") },
            { "E*F*BC----H****", new DescData("Bullion Storage", "E*F*B-----H****") },
            { "E*F*BD----H****", new DescData("Federal Reserve Bank", "E*F*B-----H****") },
            { "E*F*BE----H****", new DescData("Financial Exchange", "E*F*B-----H****") },
            { "E*F*BF----H****", new DescData("Financial Services Other", "E*F*B-----H****") },
            { "E*F*C-----H****", new DescData("Commercial Infrastructure", "E-F-------*****") },
            { "E*F*CA----H****", new DescData("Chemical Plant", "E*F*C-----H****") },
            { "E*F*CB----H****", new DescData("Firearms Manufacturer", "E*F*C-----H****") },
            { "E*F*CC----H****", new DescData("Firearms Retailer", "E*F*C-----H****") },
            { "E*F*CD----H****", new DescData("Hazardous Material Production", "E*F*C-----H****") },
            { "E*F*CE----H****", new DescData("Hazardous Material Storage", "E*F*C-----H****") },
            { "E*F*CF----H****", new DescData("Industrial Site", "E*F*C-----H****") },
            { "E*F*CG----H****", new DescData("Landfill", "E*F*C-----H****") },
            { "E*F*CH----H****", new DescData("Pharmaceutical Manufacturer", "E*F*C-----H****") },
            { "E*F*CI----H****", new DescData("Contaminated Hazardous Waste Site", "E*F*C-----H****") },
            { "E*F*CJ----H****", new DescData("Toxic Release Inventory", "E*F*C-----H****") },
            { "E*F*D-----H****", new DescData("Educational Facilities Infrastructure", "E-F-------*****") },
            { "E*F*DA----H****", new DescData("College University", "E*F*D-----H****") },
            { "E*F*DB----H****", new DescData("School", "E*F*D-----H****") },
            { "S*G*IUE---H****", new DescData("Energy Facilities Infrastructure", "E-F-------*****") },
            { "E*F*EA----H****", new DescData("Generation Station", "S*G*IUE---H****") },
            { "E*F*EB----H****", new DescData("Natural Gas Facility", "S*G*IUE---H****") },
            { "S*G*IUEN--H****", new DescData("Nuclear Facility", "S*G*IUE---H****") },
            { "S*G*IRP---H****", new DescData("Petroleum Facility", "S*G*IUE---H****") },
            { "E*F*EE----H****", new DescData("Propane Facility", "S*G*IUE---H****") },
            { "E*F*F-----H****", new DescData("Government Site Infrastructure", "E-F-------*****") },
            { "E*F*G-----H****", new DescData("Military Infrastructure", "E-F-------*****") },
            { "E*F*GA----H****", new DescData("Military Armory", "E*F*G-----H****") },
            { "S*G*IB----H****", new DescData("Military Base", "E*F*G-----H****") },
            { "E*F*H-----H****", new DescData("Postal Service Infrastructure", "E-F-------*****") },
            { "E*F*HA----H****", new DescData("Postal Distribution Center", "E*F*H-----H****") },
            { "E*F*HB----H****", new DescData("Post Office", "E*F*H-----H****") },
            { "E*F*I-----H****", new DescData("Public Venues Infrastructure", "E-F-------*****") },
            { "E*F*IA----H****", new DescData("Enclosed Facility", "E*F*I-----H****") },
            { "E*F*IB----H****", new DescData("Open Facility", "E*F*I-----H****") },
            { "E*F*IC----H****", new DescData("Recreational Area", "E*F*I-----H****") },
            { "E*F*ID----H****", new DescData("Religious Institution", "E*F*I-----H****") },
            { "E*F*J-----H****", new DescData("Special Needs Infrastructure", "E-F-------*****") },
            { "E*F*JA----H****", new DescData("Adult Day Care", "E*F*J-----H****") },
            { "E*F*JB----H****", new DescData("Child Day Care", "E*F*J-----H****") },
            { "E*F*JC----H****", new DescData("Elder Care", "E*F*J-----H****") },
            { "E*F*K-----H****", new DescData("Telecommunications Infrastructure", "E-F-------*****") },
            { "S*G*IUT---H****", new DescData("Telecommunications Facility", "E*F*K-----H****") },
            { "E*F*KB----H****", new DescData("Telecommunications Tower", "E*F*K-----H****") },
            { "S*G*IT----H****", new DescData("Transportation Infrastructure", "E-F-------*****") },
            { "E*F*LA----H****", new DescData("Air Traffic Control Facility", "S*G*IT----H****") },
            { "S*G*IBA---H****", new DescData("Airport", "S*G*IT----H****") },
            { "G*M*BCB---H***X", new DescData("Bridge", "S*G*IT----H****") },
            { "E*F*LD----H****", new DescData("Bus Station", "S*G*IT----H****") },
            { "E*F*LE----H****", new DescData("Ferry Terminal", "S*G*IT----H****") },
            { "E*F*LF----H****", new DescData("Helicopter Landing Site", "S*G*IT----H****") },
            { "WOS-ML----P----", new DescData("Lock", "S*G*IT----H****") },
            { "E*F*LH----H****", new DescData("Maintenance Facility", "S*G*IT----H****") },
            { "S*G*IBN---H****", new DescData("Port", "S*G*IT----H****") },
            { "E*F*LJ----H****", new DescData("Rail Station", "S*G*IT----H****") },
            { "E*F*LK----H****", new DescData("Rest Stop", "S*G*IT----H****") },
            { "WOS-HPBA--P----", new DescData("Ship Anchorage", "S*G*IT----H****") },
            { "E*F*LM----H****", new DescData("Toll Facility", "S*G*IT----H****") },
            { "G*S*PO----****X", new DescData("Traffic Control Point", "S*G*IT----H****") },
            { "E*F*LO----H****", new DescData("Traffic Inspection Facility", "S*G*IT----H****") },
            { "E*F*LP----H****", new DescData("Tunnel", "S*G*IT----H****") },
            { "S*G*IUP---H****", new DescData("Water Supply Infrastructure", "E-F-------*****") },
            { "E*F*MA----*****", new DescData("Control Valve", "S*G*IUP---H****") },
            { "E*F*MB----H****", new DescData("Dam", "S*G*IUP---H****") },
            { "E*F*MC----*****", new DescData("Discharge Outfall", "S*G*IUP---H****") },
            { "E*F*MD----H****", new DescData("Ground Water Well", "S*G*IUP---H****") },
            { "E*F*ME----H****", new DescData("Pumping Station", "S*G*IUP---H****") },
            { "E*F*MF----H****", new DescData("Reservoir", "S*G*IUP---H****") },
            { "E*F*MG----H****", new DescData("Storage Tower", "S*G*IUP---H****") },
            { "E*F*MH----H****", new DescData("Surface Water Intake", "S*G*IUP---H****") },
            { "E*F*MI----H****", new DescData("Wastewater Treatment Facility", "S*G*IUP---H****") }
        };

        /// <summary>
        /// A list of all the "SymData" dictionaries.
        /// </summary>
        private static readonly List<IDictionary<string, DescData>>
            DictionaryList = new List<IDictionary<string, DescData>>
                {
                    DictionaryA, DictionaryB, DictionaryC, DictionaryD, DictionaryE, DictionaryG
                };
        
        /// <summary>
        /// Returns the standard's symbol codes for the given appendix.
        /// </summary>
        /// <param name="match">Regular expression for the symbol codes to return</param>
        /// <returns>An enumerable list of strings representing the appendix symbol codes or an empty list if no codes exist</returns>
        public static IEnumerable<string> Keys(string match)
        {
            var il = new List<string>();
            try
            {
                var regex = new Regex(match);

                //// Used to be:
                //// 
                //// foreach (var d in DictionaryList)
                //// {
                ////     IEnumerable<string> keys = d.Keys;
                ////     foreach (var s in keys)
                ////     {
                ////         if (regex.Match(s).Success)
                ////         {
                ////             il.Add(s);
                ////         }
                ////     }
                //// }
                foreach (ICollection<string> keys in DictionaryList.Select(d => d.Keys))
                {
                    il.AddRange(keys.Where(s => regex.Match(s).Success));
                }
            }
            catch (Exception ex)
            {
                Log.WriteMessage(LogLevel.Warn, "Unable to match any military symbol", ex);
            }

            return il;
        }

        /// <summary>
        /// The description for the given symbol code's hierarchy as described in MIL-STD 2525C. The return string can include
        /// multiple newlines with each newline following by an increasing number of spaces for indentation purposes.
        /// In the future it may just be a series of strings separated by newlines.
        /// </summary>
        /// <param name="symbolCode">a valid 2525C symbol code</param>
        /// <returns>a formatted string, including spaces and newlines, that describes the symbol</returns>
        public static string Description(string symbolCode)
        {
            if (!SymbolData.Check(ref symbolCode))
            {
                return string.Empty;
            }

            IList<string> dictList = null;
            string newCode;
            switch (CodingScheme.GetCode(symbolCode))
            {
                case CodingScheme.TacticalGraphics:
                    newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "*****";
                    dictList = Recurse(DictionaryB, newCode);
                    break;
                case CodingScheme.Weather:
                    dictList = Recurse(DictionaryC, symbolCode);
                    break;
                case CodingScheme.StabilityOperations:
                    newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "*****";
                    dictList = Recurse(DictionaryE, newCode);
                    break;
                case CodingScheme.EmergencyManagement:
                    newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "-A***";
                    if (!DictionaryG.ContainsKey(newCode))
                    {
                        newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "H****";
                        if (!DictionaryG.ContainsKey(newCode))
                        {
                            newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "*****";
                        }
                    }

                    dictList = Recurse(DictionaryG, newCode);
                    break;
                case CodingScheme.Intelligence:
                    newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "--***";
                    dictList = Recurse(DictionaryD, newCode);
                    break;
                case CodingScheme.Warfighting:
                    newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "*****";
                    if (!DictionaryA.ContainsKey(newCode))
                    {
                        newCode = symbolCode[0] + "*" + symbolCode[2] + "*" + symbolCode.Substring(4, 6) + "H****";
                        if (!DictionaryA.ContainsKey(newCode))
                        {
                            newCode = symbolCode[0] + "*G*" + symbolCode.Substring(4, 6) + "*****";
                            if (!DictionaryA.ContainsKey(newCode))
                            {
                                newCode = symbolCode[0] + "*S*" + symbolCode.Substring(4, 6) + "*****";
                                if (!DictionaryA.ContainsKey(newCode))
                                {
                                    newCode = symbolCode[0] + "*U*" + symbolCode.Substring(4, 6) + "*****";
                                }
                            }
                        }
                    }

                    dictList = Recurse(DictionaryA, newCode);
                    break;
            }

            if (dictList == null)
            {
               return string.Empty;
            }

            var desc = new StringBuilder();
            string space = string.Empty;
            for (int i = dictList.Count - 1; i >= 0; i--)
            {
                if (desc.Length > 0)
                {
                    desc.Append(space += " ");
                }

                desc.AppendLine(dictList[i]);
            }

            return desc.ToString();
        }

        /// <summary>
        /// Recursively processes the dictionary, going up the tree, to find the ancestors of a symbol code.
        /// </summary>
        /// <param name="dict">
        /// The dictionary to traverse.
        /// </param>
        /// <param name="newCode">
        /// The code to find in the dictionary.
        /// </param>
        /// <returns>
        /// The extended list of ancestors to that point.
        /// </returns>
        private static IList<string> Recurse(IDictionary<string, DescData> dict, string newCode)
        {
            var dictList = new List<string>();
            if (dict.ContainsKey(newCode))
            {
                do
                {
                    dictList.Add(dict[newCode].Description);
                    newCode = dict[newCode].ParentCode;
                }
                while (newCode != null); // technically we should check each key in case E gets corrupted
            }

            return dictList;
        }
    }
}